资料介绍
描述
介绍
VHDL 一直让我很感兴趣,刚从 Digilent 收到我的新 Arty S7-25 FPGA 板,我有机会尝试一下!我想为我的第一个项目使用 LED 做一些事情,所以我制作了一些不同的模式,并在代码中将它们绑定在一起,以便它们一个接一个地显示。
作为 VHDL 的新手,代码可能达不到标准,但我会尽力解释,我希望你也能得到这些很酷的模式来点亮你的 FPGA 板!
我们将使用板上的四个标准 LED(不是 RGB LED)
代码
代码的总体思路是让不同的计数器控制具有使能信号的模式的长度。这些使能信号由状态机驱动。另一个process
模块对启用信号进行解码,并确定 LED 上应显示的模式。
可以在此处找到 github 存储库。查看“src”文件夹以找到主要实体。
首先,我有一些信号声明
-- enables for different patterns/counters
signal r_patt1_en : std_logic := '1';
signal r_patt2_en : std_logic := '0';
signal r_patt3_en : std_logic := '0';
signal r_patt4_en : std_logic := '0';
-- pattern counters
signal r_patt1_cntr : integer range 0 to 1e6 := 0;
signal r_patt1_light_LED : integer range 0 to 4 := 0;
signal r_patt2_cntr : integer range 0 to 2e6 := 0;
signal r_patt3_cntr : integer range 0 to 2e6 := 0;
signal r_patt3_alt_cntr : integer range 0 to 5 := 0;
signal r_patt4_duty : integer range 0 to 1e5 := 0;
signal r_patt4_cntr : integer range 0 to 1e5 := 0;
signal r_patt4_incr_duty : std_logic := '0';
上述代码的顶部包含每个模式的启用信号。在任何给定时间,只有一个可以处于活动状态。这些信号有助于确定 LED 应遵循的模式,以及启用特定于该模式的计数器。
这些是其他一些信号
-- indicates if pattern should be changed
signal r_change_pattern : std_logic := '0';
signal r_clk_cntr : integer range 0 to 36e6 := 0;
-- FSM
type t_state is (PATT1, PATT2, PATT3, PATT4);
signal STATE : t_state;
实体需要知道何时改变模式(在这种情况下,每 3 秒一次,或何时r_clk_cntr
翻转),因此r_change_pattern
被创建。此外,状态机的状态在此处声明。
让我们进入其中一种模式。
模式 1 一个接一个地切换每个 LED,就像一个带有单个 1 的移位寄存器,其余的都是零(希望这是有道理的:p)。“on” LED 保持亮起 83.333 ms(1/12 秒很容易使用 12 MHz 系统时钟实现),然后每 83.333 ms 打开一个新 LED。我为这些计数器创建了两个单独的进程。
-- pattern 1 counter keeps each LED on in pattern 1 for 83.333 ms
PATT1_CNTR_PROC : process(i_clk)
begin
if rising_edge(i_clk) then
if r_patt1_en = '0' then
r_patt1_cntr <= 0;
else
if r_patt1_cntr < 1e6 then
r_patt1_cntr <= r_patt1_cntr + 1;
else
r_patt1_cntr <= 0;
end if;
end if;
end if;
end process;
对于 12 MHz 系统时钟,1/12 秒(或 100 万个 clk 周期计数)是使用时间的简单度量。r_patt1_cntr
在翻转到 0 之前计数到这个数字,导致 1/12 秒或 83.333 毫秒。
-- pattern 1 alt counter signals when to switch LEDs every 83.333 ms
PATT1_ALT_CNTR_PROC : process(i_clk)
begin
if rising_edge(i_clk) then
if r_patt1_en = '0' then
r_patt1_light_LED <= 0;
else
if r_patt1_cntr = 1e6 then
if r_patt1_light_LED < 4 then
r_patt1_light_LED <= r_patt1_light_LED + 1;
else
r_patt1_light_LED <= 0;
end if;
end if;
end if;
end if;
end process;
PATT1_ALT_CNTR_PROC
监视r_patt1_cntr
并查找 1e6 的最大值。一旦完成,r_patt1_light_LED
就会增加。这将确定哪个 LED 亮起。
在代码的更下方,我们看到PATT_DECODE_PROC.
这个过程(如下)决定了在模式启用时应该发生什么。
PATT_DECODE_PROC : process(i_clk)
variable r_patt_en : std_logic_vector(3 downto 0);
begin
if rising_edge(i_clk) then
r_patt_en := r_patt1_en & r_patt2_en & r_patt3_en & r_patt4_en; -- cnct into vect
if r_patt_en = "1000" then -- blink LEDS in circle
case r_patt1_light_LED is
when 0 =>
r_LEDs <= "0001";
when 1 =>
r_LEDs <= "0010";
when 2 =>
r_LEDs <= "0100";
when 3 =>
r_LEDs <= "1000";
when 4 =>
r_LEDs <= "0000";
end case;
首先,所有不同的模式使能连接成一个向量 ( r_patt_en
) 以便于阅读。然后,对此进行检查。如果r_patt_en = "1000"
, 意思r_patt1_en
是激活的,模式 1 将显示在 LED 上。但是,在模式 1 期间会发生什么?
还记得PATT1_ALT_CNTR_PROC
吗?该过程增加了一个名为 的信号r_patt1_light_LED
,该信号由PATT_DECODE_PROC
(上面)使用 case 语句读取,并点亮与 的值相对应的每个 LED r_patt1_light_LED
。
其余模式以这种方式编码,带有计数器和使能,然后中的 case 语句PATT_DECODE_PROC
点亮 LED。除了上面的示例模式之外,还有一个切换模式、一个心跳模式和一个使用 PWM 的调光模式。
模拟
github repo 上的“sim”文件中有一个测试台。如果您选择运行 sim,只需知道它可能需要大约 8 分钟(取决于您的机器)。每个模式显示 3 秒,因此最短模拟时间应该是 12 秒才能看到所有 4 个模式。
这是几分钟后我的 sim 卡的样子:
您可以清楚地看到第一个模式的类似移位寄存器的行为,以及心跳模式。最后的PWM调光模式只能放大查看。
构建项目
打开 Vivado 并创建一个项目。出现提示时,从“Boards”菜单中选择“Arty S7-25”。
如果您没有看到这个,请使用此处找到的 Digilent 更新您的电路板文件。
从 github repo 添加源文件、sim 文件和约束文件,并生成比特流。
对您的电路板进行编程,您应该会在 4 个 LED 上看到一些整齐的图案:)
结论
感谢您关注我的第一个 VHDL/Arty S7 项目!请修改代码以创建您自己的模式!在评论中发布任何新模式或问题。我想看看你创造了什么:)
- 高通 S7 和S7 Pro 音频芯片
- 基于Digilent Arty S7加速计的Windows鼠标
- SIMATIC NET OPC服务器与PLC的S7连接简介 1次下载
- 西门子S7程序软件下载 23次下载
- 通过MPI建立OPC服务器与S7-200 PLC集成口的S7连接 5次下载
- 西门子的SIMATIC S7 STEP7 V5.0使用手册 37次下载
- S7系列PLC上位机通信及PRODAVE软件包在上位机中的使用资料说明 31次下载
- 西门子s7-300和s7-400集成PN口的s7通信 14次下载
- 比亚迪S7电路图 120次下载
- S7通讯的功能及特点 19次下载
- S7 路由功能说明介绍 9次下载
- 基于S7-1500的S7通信编程 39次下载
- 西门子S7-400 工业软件 S7 F FH Systems组态 17次下载
- Arty Board Artix-7 FPGA开源创客开发板用户手册 205次下载
- SIMATIC S7系统概述
- 西门子S7协议与TCP协议的区别 4063次阅读
- S7-1500之间S7通信实例 3299次阅读
- 西门子S7-1500 之间 S7 通信 5798次阅读
- 西门子支持S7子网路由功能的模块有哪些? 1355次阅读
- S7-1200 CPU与S7-200 SMART S7通信教程 6657次阅读
- S7-1200 CPU与S7-200 SMART S7通信指南 3209次阅读
- 如何在WinCC上显示S7 CPU的运行模式 1113次阅读
- S7-400基于PROFIBUS总线的S7单边通信 1642次阅读
- S7-1500和S7-1500之间S7通信 3073次阅读
- S7-400基于PROFIBUS总线的S7单边通信的组态步骤 3670次阅读
- digilentSpartan-7开源创客开发板介绍 3371次阅读
- digilent Arty A7-100 FPGA开源创客开发板介绍 6649次阅读
- digilent Cmod S7: Spartan-7 FPGA 介绍 3162次阅读
- S7-1200和S7-1200进行S7通信的详细资料说明 2.9w次阅读
- 三星S7和三星S6的区别对比 1.5w次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多