vhdl 中的 8 位串行到并行移位器
8 bit serial to parallel shifter in vhdl
我在 vhdl 中编写了一个 8 位移位器:
entity 8b is
port(s, clk : in std_logic; p : out std_logic_vector (7 downto 0));
end entity;
architecture arch of 8b is
Signal iq : std_logic_vector (7 downto 0);
begin
process(clk)
begin
if rising_edge(clk) then
iq(7) <= s;
iq(6 downto 0) <= iq(7 downto 1);
end if;
end process;
p <= iq;
end architecture;
我的想法是接受输入并将其提供给我的第一个 D-FF。
然后在接下来的 7 个周期中,其他触发器获得其他串行输入,这些输入将提供给并行输出 p。
但是,我不确定这个逻辑是否有缺陷,因为这是我们为这个练习得到的解决方案:
architecture behavior of 8b is
signal p_intern : std_logic_vector(7 downto 0);
begin
P <= p_intern;
process(CLK)
begin
if rising_edge(CLK) then
p_intern <= p_intern(6 downto 0) & S;
end if;
end process;
end architecture;
但我不明白 p_intern <= p_inter(6 downto 0) & S;
部分。
谁能解释一下这背后的逻辑,我的版本是否也有效?
两个实现之间的唯一区别似乎是线条
iq(7) <= s;
iq(6 downto 0) <= iq(7 downto 1);
对比
p_intern <= p_intern(6 downto 0) & S;
并且 iq
被命名为 p_intern
。为了便于比较,我们假设它们都被命名为 iq
。
让我们看看他们在做什么:
第一个实现(你的)分配给 iq
的位置:
7 6 5 ... 1 0
s iq(7) iq(6) ... iq(2) iq(1)
第二种实现(方案)赋值
7 6 5 ... 1 0
iq(6) iq(5) iq(4) ... iq(0) s
其中 iq(6 downto 0) & s
表示“将 s
连接到 iq(6 downto 0)
的右侧”。
所以它们不等价。您的实施从左侧移动值,解决方案从右侧移动值。哪一个是正确的取决于规范(大概解决方案是正确的)。
我在 vhdl 中编写了一个 8 位移位器:
entity 8b is
port(s, clk : in std_logic; p : out std_logic_vector (7 downto 0));
end entity;
architecture arch of 8b is
Signal iq : std_logic_vector (7 downto 0);
begin
process(clk)
begin
if rising_edge(clk) then
iq(7) <= s;
iq(6 downto 0) <= iq(7 downto 1);
end if;
end process;
p <= iq;
end architecture;
我的想法是接受输入并将其提供给我的第一个 D-FF。 然后在接下来的 7 个周期中,其他触发器获得其他串行输入,这些输入将提供给并行输出 p。
但是,我不确定这个逻辑是否有缺陷,因为这是我们为这个练习得到的解决方案:
architecture behavior of 8b is
signal p_intern : std_logic_vector(7 downto 0);
begin
P <= p_intern;
process(CLK)
begin
if rising_edge(CLK) then
p_intern <= p_intern(6 downto 0) & S;
end if;
end process;
end architecture;
但我不明白 p_intern <= p_inter(6 downto 0) & S;
部分。
谁能解释一下这背后的逻辑,我的版本是否也有效?
两个实现之间的唯一区别似乎是线条
iq(7) <= s; iq(6 downto 0) <= iq(7 downto 1);
对比
p_intern <= p_intern(6 downto 0) & S;
并且 iq
被命名为 p_intern
。为了便于比较,我们假设它们都被命名为 iq
。
让我们看看他们在做什么:
第一个实现(你的)分配给 iq
的位置:
7 6 5 ... 1 0
s iq(7) iq(6) ... iq(2) iq(1)
第二种实现(方案)赋值
7 6 5 ... 1 0
iq(6) iq(5) iq(4) ... iq(0) s
其中 iq(6 downto 0) & s
表示“将 s
连接到 iq(6 downto 0)
的右侧”。
所以它们不等价。您的实施从左侧移动值,解决方案从右侧移动值。哪一个是正确的取决于规范(大概解决方案是正确的)。