【问题标题】:Bit shift register vhdl varying size移位寄存器 vhdl 可变大小
【发布时间】:2013-09-18 11:29:07
【问题描述】:

我正在尝试获得两个输出 (pulse(0) and pulse(1)) 以提供一个短的一个时钟脉冲。这些脉冲之间的延迟需要由一些输入值来控制。所以 0x1 = 1 个时钟周期等等。

目前,一旦触发器打开,它就会保持打开状态

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
use work.ipbus.all;

<...snip>


architecture rtl of trig_latency is

signal ack : std_logic;
signal s_level : unsigned(pulse'range);
signal s_level_d1 : std_logic;
signal bit_shift : std_logic_vector(addr_width downto 0);
signal latency: integer:=5;


begin
latency <= to_integer(unsigned(in_data(addr_width -1 downto 0))) when addr_width > 0 else 0;
    process(clk)
        begin
            if rising_edge(clk) then
                if ipbus_in.ipb_strobe='1' and ipbus_in.ipb_write = '1' then
                    s_level <= s_level + 1;
                    s_level_d1<=s_level(s_level'left);
                              else
                               s_level<=(others=>'0);


                end if;

                bit_shift <= bit_shift(bit_shift'high-1 downto 0) & (s_level(s_level'left) and (not s_level_d1));
                ipbus_out.ipb_rdata <= (others => '0');
                ack <= ipbus_in.ipb_strobe and not ack; 

                pulse(0) <= s_level(s_level'left) and (not s_level_d1);
                pulse(1)<=bit_shift(latency);

            end if;

    end process;

  ipbus_out.ipb_ack <= ack;
  ipbus_out.ipb_err <= '0';

end rtl;

【问题讨论】:

标签: vhdl


【解决方案1】:

为什么你不能完全改变你的位而忽略它们超过N的事实。通常的 VHDL 移位器使用 &amp; 将移位寄存器与新值连接起来:

bit_shift <= bit_shift(bit_shift'high-1 downto 0) & s_level;

这应该可以很好地生成您的移位寄存器。

pulse(1) &lt;= bit_shift(N) 应该可以正常工作。

【讨论】:

  • 这适用于我给出的示例,但是当我更改此代码以确保它给出一个脉冲而不是两个脉冲时它会中断。
  • 你能显示一些波形吗?例如 in_data 在做什么?
  • In_data 实际上只是保持在一个值,例如 1、2、3、4 等。我知道它可以工作,因为我已经使用了很多次。不幸的是,由于各种原因,我很难得到波形。它基本上显示第一个触发器触发,保持开启,然后几个时钟周期后,第二个触发器触发并保持开启。我怀疑它与移位寄存器中的逻辑有关
  • 即使我删除“in_data”并将该数字作为常数,它仍然保持脉冲逻辑高。所以我真正需要的是:else s_level'0');
  • 这就是波形会有所帮助的原因 - 我认为您的问题是获得正确的延迟。我错过了您说第二个触发器仍在继续的更新!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多