使用Vhdl生成模式。。。?
我需要生成16位的led图案…我的延迟无法生成所需图案。。。。。 此外,我的for循环在延迟情况下无法正常工作 只是我需要一个帮助如何生成模式使用任何位使用延迟使用Vhdl生成模式。。。?,vhdl,Vhdl,我需要生成16位的led图案…我的延迟无法生成所需图案。。。。。 此外,我的for循环在延迟情况下无法正常工作 只是我需要一个帮助如何生成模式使用任何位使用延迟 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity counters_1 is port(CLK : in std_logic; Q : out std_logic_vector(2 downto
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counters_1 is
port(CLK : in std_logic;
Q : out std_logic_vector(2 downto 0);
led_out : out std_logic_vector(15 downto 0));
end counters_1;
architecture archi of counters_1 is
signal tmp: std_logic_vector(2 downto 0) := "000";
begin
process (CLK)
begin
-- variable i :Integer :=0;
-- variable j :Integer :=0;
if (CLK'event and CLK='1') then
tmp <= tmp + 1;
if( tmp="100") then
tmp <="000";
end if;
end if;
if(tmp="00") then
loop1: for i in 0 to 10 loop
led_out <="0000000000000001" ;
led_out <="0000000000000010" ;
end loop;
end if;
if(tmp="01") then
loop2: for i in 0 to 10 loop
led_out <="1111111100000000";
led_out <="000000001111111" after 500 ms;
end loop;
end if;
if(tmp="10") then
loop3: for i in 0 to 10 loop
led_out <="0011000000000101";
led_out <="0000000111000110" after 500 ms;
end loop;
end if;
if(tmp="11") then
loop4: for i in 0 to 10 loop
led_out <="0000001100000111" after 500 ms;
led_out <="0000000000001000" after 500 ms;
led_out <="0001001000001000" after 500 ms;
led_out <="0000000000001000" after 500 ms;
led_out <="0100001100000111" after 500 ms;
led_out <="0000000000001000" after 500 ms;
led_out <="0010001000001000" after 500 ms;
led_out <="1000000000001000" after 500 ms;
led_out <="0001001100000111" after 500 ms;
led_out <="0000000000001000" after 500 ms;
led_out <="0011001000001000" after 500 ms;
led_out <="0000000000001000" after 500 ms;
led_out <="0100111100000111" after 500 ms;
led_out <="0000011110001000" after 500 ms;
led_out <="0010001000001000" after 500 ms;
led_out <="1000001110001000" after 500 ms;
end loop;
end if;
end process;
Q <= tmp;
end archi;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.std_logic_unsigned.all;
实体计数器_1为
端口(时钟:在标准逻辑中;
Q:输出标准逻辑向量(2到0);
led_out:输出标准逻辑_向量(15向下至0);
末端计数器1;
计数器_1的架构archi为
信号tmp:std_逻辑_向量(2到0):=“000”;
开始
过程(CLK)
开始
--变量i:整数:=0;
--变量j:整数:=0;
如果(CLK'事件和CLK='1'),则
tmp您的代码看起来像一个测试台,所以我假设这就是您想要的。你的问题围绕着理解“之后”。“After”用于安排信号的延迟。然而,它从未停止这一过程。信号值已安排,进程将继续进行,而不会经过任何时间
另一方面,您希望过程停止。您需要使用wait使进程停止
将其用于loop4中的代码:
loop4: for i in 0 to 10 loop
wait for 500 ms ;
led_out <="0000001100000111" ;
wait for 500 ms ;
led_out <="0000000000001000" ;
wait for 500 ms ;
led_out <="0001001000001000" ;
...
如果你在做RTL代码,我将单独发表一篇文章。如果你在做RTL设计,你需要更多地考虑问题中的硬件。画画。对图片进行编码
为了帮助这个过程,你需要考虑以下内容:
- 时钟走得有多快李>
- 你打算如何用你的时钟创建一个500毫秒的指示器?(提示:计数器+解码器)
- 在Clk上切换tmp太快
- 要获得loop4中的序列,需要一个状态机或另一个计数器和解码器
一旦你仔细考虑了你的问题,就要问更多的问题。这需要合成吗?像这样的延迟是不可合成的。最好是基于计数器创建状态机。
if(tmp(1 downto 0) ="00") then