【发布时间】:2015-04-24 07:04:21
【问题描述】:
我尝试设计一个bch码作为移位寄存器,所以我有这个示意图:
我在 Altera Quartus 中编写了一个 VHDL 代码来设计这个带有循环的移位寄存器,编译工作但在 ModelSim 中的仿真过程中没有得到预期的结果(无输出)。我的代码中可能有一些错误:
-- Library declaration
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_arith.ALL;
USE IEEE.std_logic_unsigned.ALL;
-- Entity declaration
ENTITY bchcode_implementation_top IS
PORT(clk : IN std_logic;
Q : OUT std_logic_vector(7 downto 0));
END bchcode_implementation_top;
-- Architecture declaration
ARCHITECTURE arch_bchcode_implementation_top OF bchcode_implementation_top IS
SIGNAL M: std_logic_vector(7 downto 0) := "10000000";
BEGIN
PROCESS(clk)
VARIABLE W: std_logic;
VARIABLE D: std_logic_vector(7 downto 0) := "00000000";
BEGIN
loop_bchcode: FOR I IN 7 TO 0 LOOP
IF rising_edge(clk) THEN
W := D(0) XOR M(I);
D(7) := W;
D(6) := D(7);
D(5) := D(6);
D(4) := D(5);
D(3) := D(4) XOR W;
D(2) := D(3);
D(1) := D(2) XOR W;
D(0) := D(1) XOR W;
END IF;
Q <= D;
END LOOP loop_bchcode;
END PROCESS;
END arch_bchcode_implementation_top;
如果有人有想法请..谢谢您的回复。
【问题讨论】:
-
变量被立即赋值。例如,如果
D(6) := D(7)然后D(5) := D(6),D(5)将等于D(7)。这意味着D(6)的值已被破坏,您必须更改分配顺序。所以如果你想使用变量赋值的顺序必须是D(0),D(1), ...,D(7)。 -
感谢您的回复,我已将所有 D 都更改了,但我仍然没有预期的结果,如果有人可以告诉我我的代码中是否还有其他错误,谢谢