当rst ='1'时再次启动输入信号

时间:2019-01-13 19:33:11

标签: loops vhdl vivado

我试图在重置信号开始时重置电路中输入的值。

我正在用Xilinx在VHLD中编写Vivado。

signal Xin : signed(4 downto 0) := (others => '0');

...

   stim_process: process
   begin
        Xin <= to_signed(1030,5); wait for clk_period;
        Xin <= to_signed(1050,5); wait for clk_period;
        Xin <= to_signed(1040,5); wait for clk_period;
        Xin <= to_signed(1080,5); wait for clk_period;
        Xin <= to_signed(1100,5); wait for clk_period;
        Xin <= to_signed(0,5);    wait until Rst= '1';
        Xin <= to_signed(1030,5); wait for clk_period;
        Xin <= to_signed(1050,5); wait for clk_period;
        Xin <= to_signed(1040,5); wait for clk_period;
        Xin <= to_signed(1080,5); wait for clk_period;
        Xin <= to_signed(1100,5); wait for clk_period;
        Xin <= to_signed(0,5);            
        wait;
   end process; 

通过这种方式,在分配完所有输入后发送复位信号,即可获得所需的结果。

问题是:

  

我找不到一种方法可以随时重置输入信号的顺序以及需要多少次。

1 个答案:

答案 0 :(得分:1)

重写它以将序列中有关位置的信息保留为状态信息,例如:

process (rst, clk) is
begin
  if rst = '1' then
    State <= 0;
    Xin <= to_signed(1030,5);
  elsif rising_edge(clk) then
    case State is
      when 0      => Xin <= to_signed(1030,5);
      when 1      => Xin <= to_signed(1050,5);
      when 2      => Xin <= to_signed(1040,5);
      when 3      => Xin <= to_signed(1080,5);
      when 4      => Xin <= to_signed(1100,5);
      when others => Xin <= to_signed(0,5);
    end case;
    State <= State + 1;
  end if;
end process;

rst中进行的重置可以立即生效并重复执行。

根据您希望的时间,可能需要对上述内容进行较小的更新,但是按照上面的代码进行工作即可。

顺便说一句。将值1030转换为5位to_signed的过程Xin看起来很奇怪,因为1030的值至少需要12位才能用于带符号表示。