【发布时间】:2023-03-09 14:07:01
【问题描述】:
我在使用 ISE 合成我的代码时遇到了问题。请检查代码并给我建议如何根据特定条件修改它。我的问题仅与计数器的 STAYCOUNT 实体有关。请注意, clk 由另一个电路提供,而 staycount 也由另一个电路提供。
- 在初始化步骤中,STAYCOUNT = 0,如果 Reset = 0,并且 clk = 1,则 count=count+1,并给出输出 DOUT = COUNT。
- 如果重置 = 1,则计数 = 计数 - 计数。
- 然后下一个电路处理 DOUT 的输出,它会停止向计数器馈送或在特定条件下馈送(保持计数 = 1)。
- 只要staycount = 1。 如果 clk = 1 那么 while staycount = 1 循环 计数 = 计数 + 1 DOUT
- 结束如果
有 2 个问题: 1. 在初始化步骤中,只有当 staycount = 0 且 clk= 1 时,它才应该只处理 count=count+ 1 1 次并给出输出 DOUT。 在 DOUT 向另一个电路发送信号后,该电路有 2 个输出,要么保持计数等于 1,要么继续进行另一个输出。 2. 假设另一个电路给出一个输出staycount = 1,它应该给计数器供电,计数器再次检查clk = 1和staycount = 1是否使count = count + 1并给出另一个输出DOUT = COUNT .
请检查我的计数器代码。但是,它错过了问题#1 的陈述,并成功解决了问题#2,但出现错误 Xilinx ISE "Non-static loop limit exceeded"。
entity counter is
generic(n: natural :=4);
port( CLK: in std_logic;
Reset : in std_logic;
staycount: in std_logic;
DOUT : out std_logic_vector(n-1 downto 0) );
end counter;
architecture behavior of counter is
begin
process(CLK,CLK,Reset,staycount,COUNT) -- behavior describe the counter
variable COUNT:std_logic_vector(n-1 downto 0);
begin
if Reset = '1' then
COUNT := COUNT - COUNT;
elsif (CLK='1' and CLK'event) then
while (staycount = '1') loop
COUNT := COUNT + 1;
DOUT <= COUNT after 50 ns;
end loop;
else DOUT <= COUNT;
end if;
end process;
end behavior;
【问题讨论】:
-
你只想在一个时钟周期内计数一次,对吧?所以将
while更改为if(和loop匹配)。 -
我已经解决了我的问题,但我不介意任何 cmets 或回答来提高我的技能。
标签: vhdl