我正在学习VHDL,我正在尝试制作4位奇偶校验器。其思想是比特来自一条输入线(每个时钟脉冲一个比特),并且校验器应该找出在4比特序列中是否存在奇数个1(即1011、0100等)。如果有,则发送错误输出(例如,错误标志:错误<=´1´)。
有没有人能给我举个例子,让我研究一下它是怎么做的?
我试着在网上搜索,但我找到的所有讨论都与一些更复杂的东西有关,我无法理解它们。
发布于 2011-11-22 00:50:10
VHDL2008标准提供了一种新的xor运算符来执行此操作。比Aaron提供的传统解决方案简单得多。
signal Data : std_logic_vector(3 downto 0) ;
signal Parity : std_logic ;
. . .
Parity <= xor Data ;
发布于 2011-11-20 10:08:53
这里假设"invec“是你的输入std_logic_vector:
parity <= invec(3) xor invec(2) xor invec(1) xor invec(0);
如果它的输入大于4,那么循环可能是最好的:
variable parity_v : std_logic := '0';
for i in invec'range loop:
parity_v := parity_v xor invec(i);
end loop;
parity <= parity_v;
该循环将在合成时转换为适当的LUT值。
(我是在内存中完成此操作的;可能存在轻微的语法问题。)
发布于 2019-05-02 21:30:36
代码中有一个小的语法错误。应该在循环之后删除":“。
https://stackoverflow.com/questions/8191174
复制相似问题