赛灵思
直播中

曾玲娟

7年用户 192经验值
私信 关注
[问答]

请问如何在ISIM工具上模拟简单的LED闪烁?

你好社区!,你能帮帮我吗?
我是FPGA和VHDL的新手,所以请帮助我:我现在没有FPGA板,但目标是Spartan 3入门套件。
那么如何在ISIM上模拟LED输出行为(闪烁的LED)而不是在板上进行物理测试,这样我就可以分析信号,看看它是否正常......我希望你能帮助我,谢谢。
现在我有这个代码项目文件(查看附件),但我不知道为什么模拟中的LED不会像我预期的那样闪烁。
PD:对于模拟,LED闪烁可以是例如
ON后100ns,再次100ns后OFF。
ledBlink.rar 571 KB

回帖(5)

吕钢格

2020-5-12 08:37:09
嗨@ antomabu,
我查看了你附上的文件。
唯一缺少的是信号初始化。
初始化信号后,我能够看到LED信号切换。
您将能够在软件中进行模拟,但为了在硬件上看到LED切换,您必须确保信号的时间段与视觉的持久性相匹配。
因此,根据您的频率要求,您可能必须使用比此更大的计数器。
附加修改后的代码,这将有助于模拟。
库IEEE;使用IEEE.STD_LOGIC_1164.ALL;使用IEEE.STD_LOGIC_ARITH.ALL;使用IEEE.STD_LOGIC_UNSIGNED.ALL;
- 如果使用带有有符号或无符号值的算术函数,则取消注释以下库声明 - 使用IEEE.NUMERIC_STD.ALL;
- 如果在此代码中实例化 - 任何Xilinx原语,则取消注释以下库声明.-- library UNISIM; - 使用UNISIM.VComponents.all;
实体ledBlink是端口(clk_50mhz:在STD_LOGIC中;计数器:输出std_logic_vector(3 downto 0); led:输出STD_LOGIC);结束ledBlink;
ledBlink的架构bhv是信号counter_signal:std_logic_vector(3 downto 0):=“0000”;
signal pulse_1hz:std_logic:='0';开始预分频器:进程(clk_50mhz)如果rising_edge(clk_50mhz)则开始,如果counter_signal则为counter_signal,其中pulse_1hz为counter_signal'0');
万一;
万一;
最终过程预分频器;
led counter(3 downto 0)end bhv;
谢谢,Arpan -----------------------------------------------
- - - - - - - - - - - - - - - - - - - - - - - -请注意-
如果提供的信息有用,请将答案标记为“接受为解决方案”。给予您认为有用且回复的帖子。感谢Kudos .--------------------
--------------------------------------------------
------------------------
在原帖中查看解决方案
举报

陈衡毅

2020-5-12 08:54:46
嗨@antomabu
您可以尝试切换输出,例如,当您想要发光LED时将其设为1。
我附加了一个控制Spartan 3AN套件的一个LED的设计供您参考。
谢谢,维杰-----------------------------------------------
---------------------------------------------请将帖子标记为
一个答案“接受为解决方案”,以防它有助于解决您的查询。如果一个帖子引导到解决方案,请给予赞誉。
XC3S700AN-4FGG400.zip 191 KB
举报

吕钢格

2020-5-12 09:08:47
嗨@ antomabu,
我查看了你附上的文件。
唯一缺少的是信号初始化。
初始化信号后,我能够看到LED信号切换。
您将能够在软件中进行模拟,但为了在硬件上看到LED切换,您必须确保信号的时间段与视觉的持久性相匹配。
因此,根据您的频率要求,您可能必须使用比此更大的计数器。
附加修改后的代码,这将有助于模拟。
库IEEE;使用IEEE.STD_LOGIC_1164.ALL;使用IEEE.STD_LOGIC_ARITH.ALL;使用IEEE.STD_LOGIC_UNSIGNED.ALL;
- 如果使用带有有符号或无符号值的算术函数,则取消注释以下库声明 - 使用IEEE.NUMERIC_STD.ALL;
- 如果在此代码中实例化 - 任何Xilinx原语,则取消注释以下库声明.-- library UNISIM; - 使用UNISIM.VComponents.all;
实体ledBlink是端口(clk_50mhz:在STD_LOGIC中;计数器:输出std_logic_vector(3 downto 0); led:输出STD_LOGIC);结束ledBlink;
ledBlink的架构bhv是信号counter_signal:std_logic_vector(3 downto 0):=“0000”;
signal pulse_1hz:std_logic:='0';开始预分频器:进程(clk_50mhz)如果rising_edge(clk_50mhz)则开始,如果counter_signal则为counter_signal,其中pulse_1hz为counter_signal'0');
万一;
万一;
最终过程预分频器;
led counter(3 downto 0)end bhv;
谢谢,Arpan -----------------------------------------------
- - - - - - - - - - - - - - - - - - - - - - - -请注意-
如果提供的信息有用,请将答案标记为“接受为解决方案”。给予您认为有用且回复的帖子。感谢Kudos .--------------------
--------------------------------------------------
------------------------
举报

王艳红

2020-5-12 09:24:27
非常感谢arpansur!
它对我帮助很大。
是的,我理解那一部分,我需要用向量24 downto 0创建一个更大的计数器,所以我可以设置25000000次计数。
一旦实现了这个项目,您认为可以模拟斯巴达3板的七段信号输出吗?
它有4个显示器。
我可以用led Blink应用相同的方法吗?
比如每100ns或10次计数,增加/减少显示器的数量?
并显示该号码在ISIM上显示为信号输出?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分