用于将50MHz转换为38KHz的VHDL代码';行不通
我对这个代码有问题。理论上,它应该将我的50MHz符号转换为36KHz,但当我运行模拟时,结果表明ir_38khz没有得到任何值,它是未分配的 你能帮我滑到哪里吗用于将50MHz转换为38KHz的VHDL代码';行不通,vhdl,Vhdl,我对这个代码有问题。理论上,它应该将我的50MHz符号转换为36KHz,但当我运行模拟时,结果表明ir_38khz没有得到任何值,它是未分配的 你能帮我滑到哪里吗 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use IEEE.NUMERIC_STD.all; entity orajelKonverter is Port ( clk50 : in STD_LOGIC;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.NUMERIC_STD.all;
entity orajelKonverter is
Port ( clk50 : in STD_LOGIC;
rst : in STD_LOGIC;
ir_38khz : out STD_LOGIC);
end orajelKonverter;
architecture Behavioral of orajelKonverter is
signal hz38_ctr : STD_LOGIC_VECTOR(9 downto 0);
signal s38 : std_logic;
begin
clk_generator : process (clk50, rst)
begin
if rst = '1' then
s38 <= '0';
hz38_ctr <= (others => '0');
elsif clk50='1' then
if hz38_ctr = "1010010010" then
hz38_ctr <= (others => '0');
s38 <= not s38;
else
hz38_ctr <= hz38_ctr + "1";
end if;
end if;
end process clk_generator;
ir_38khz <= s38;
end Behavioral;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.STD_LOGIC_UNSIGNED.ALL;
使用IEEE.NUMERIC_STD.all;
实体OraJetConverter是
端口(clk50:标准逻辑中;
rst:标准逻辑中;
ir_38khz:输出标准_逻辑);
末端或转位器;
orajelKonverter的架构是
hz38信号中心:标准逻辑向量(9到0);
信号s38:std_逻辑;
开始
clk_发生器:过程(clk50,rst)
开始
如果rst='1',则
s38您需要将信号初始化为某个值,或者在模拟中断言重置以初始化它们。我个人更喜欢#1,因为信号初始条件是可合成的,尽管相对普遍的误解是它们不是。事实上,我在设计中避免重置,除非我绝对需要使用它们。事实上,这是。例如,你可以做:
signal s38 : std_logic := '0';
这将保证当模拟开始时,它知道如何处理线:
s38 <= not s38;
s38使用上升沿(clk50)
而不是检测其电平为“1”。。。我也会使用一个范围整数作为计数器…Brian我尝试使用上升沿(clk50),但结果与以前一样。如果在“实例和进程”窗口中打开DUT,您可以将其所有信号添加到sim卡(并重新启动/重新运行)。看到里面发生了什么可能会告诉你出了什么问题。否(初始值),但是重置。。。重置子句将正确地执行此操作。。。只要他真的在测试台上将重置驱动到“1”并返回到“0”。@BrianDrummond,我不同意使用重置。阅读我在回答中添加的Xilinx白皮书。我用这种哲学来处理我的设计。有趣的是,我没有看过那篇论文。重置仍然有它们的位置,您不必总是为了重置而重新配置。但是肯确实提出了很好的观点,并且很好地解决了重设大型设计的问题。