Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
32位数据输入和CRC7 VHDL代码_Vhdl_Crc - Fatal编程技术网

32位数据输入和CRC7 VHDL代码

32位数据输入和CRC7 VHDL代码,vhdl,crc,Vhdl,Crc,我想检查我的代码是否正确 32 bits data_in 7 bits CRC 请帮我检查,如果可能的话,解释一下这个代码是如何工作的 library ieee; use ieee.std_logic_1164.all; entity CRC7_32 is port (data_in : in std_logic_vector (31 downto 0); crc_en , rst, clk : in std_logic; crc_out : out std_logic_vector (6

我想检查我的代码是否正确

32 bits data_in
7 bits CRC
请帮我检查,如果可能的话,解释一下这个代码是如何工作的

library ieee;
use ieee.std_logic_1164.all;

entity CRC7_32 is
port (data_in : in std_logic_vector (31 downto 0);
crc_en , rst, clk : in std_logic;
crc_out : out std_logic_vector (6 downto 0));

end CRC7_32;

architecture behavior of CRC7_32 is

signal crc_block: std_logic_vector (6 downto 0);
signal crc_next_state: std_logic_vector (6 downto 0);

begin

crc_out <= crc_block;

crc_next_state(0) <= crc_block(5) xor crc_block(6) xor data_in(0) xor data_in(4) xor data_in(7) xor data_in(8) xor data_in(12) xor data_in(14) xor data_in(15) xor data_in(16) xor data_in(18) xor data_in(20) xor data_in(21) xor data_in(23) xor data_in(24) xor data_in(30) xor data_in(31);
crc_next_state(1) <= crc_block(6) xor crc_block(0) xor data_in(1) xor data_in(5) xor data_in(8) xor data_in(9) xor data_in(13) xor data_in(15) xor data_in(16) xor data_in(17) xor data_in(19) xor data_in(21) xor data_in(22) xor data_in(24) xor data_in(25) xor data_in(31);
crc_next_state(2) <= crc_block(0) xor crc_block(1) xor data_in(2) xor data_in(6) xor data_in(9) xor data_in(10) xor data_in(14) xor data_in(16) xor data_in(17) xor data_in(18) xor data_in(20) xor data_in(22) xor data_in(23) xor data_in(25) xor data_in(26);
crc_next_state(3) <= crc_block(1) xor crc_block(2) xor crc_block(5) xor crc_block(6) xor data_in(0) xor data_in(3) xor data_in(4) xor data_in(8) xor data_in(10) xor data_in(11) xor data_in(12) xor data_in(14) xor data_in(16) xor data_in(17) xor data_in(19) xor data_in(20) xor data_in(26) xor data_in(27) xor data_in(30) xor data_in(31);
crc_next_state(4) <= crc_block(2) xor crc_block(3) xor crc_block(6) xor data_in(1) xor data_in(4) xor data_in(5) xor data_in(9) xor data_in(11) xor data_in(12) xor data_in(13) xor data_in(15) xor data_in(17) xor data_in(18) xor data_in(20) xor data_in(21) xor data_in(27) xor data_in(28) xor data_in(31);
crc_next_state(5) <= crc_block(3) xor crc_block(4) xor data_in(2) xor data_in(5) xor data_in(6) xor data_in(10) xor data_in(12) xor data_in(13) xor data_in(14) xor data_in(16) xor data_in(18) xor data_in(19) xor data_in(21) xor data_in(22) xor data_in(28) xor data_in(29);
crc_next_state(6) <= crc_block(4) xor crc_block(5) xor data_in(3) xor data_in(6) xor data_in(7) xor data_in(11) xor data_in(13) xor data_in(14) xor data_in(15) xor data_in(17) xor data_in(19) xor data_in(20) xor data_in(22) xor data_in(23) xor data_in(29) xor data_in(30);

process (clk,rst)

begin

if (rst = '1') then
crc_block <= b"0000000";
elsif (clk'EVENT and clk = '1') then
if (crc_en = '1') then
crc_block <= crc_next_state;
end if;
end if;
end process;
end architecture behavior;
ieee库;
使用ieee.std_logic_1164.all;
实体CRC7_32为
端口(数据输入:标准逻辑向量(31到0);
crc_en、rst、clk:标准逻辑中;
crc_out:out标准逻辑_向量(6到0));
结束CRC7_32;
CRC7_32的体系结构行为是
信号crc_块:标准逻辑_向量(6到0);
信号crc下一状态:标准逻辑向量(6到0);
开始

crc\u out我发现了一个用于嵌入式网络的论文循环冗余码(crc)多项式选择,表3中指定CRC7逆为多项式选择0x44,为1+x^3+x^7

OutputLogic.com具有将输出Verilog或VHDL的。步骤1,将数据宽度设置为32,将多项式宽度设置为7。该协议是用户定义的,因为CRC7不是预定义的情况之一(听起来像是类分配)。点击应用按钮并选择步骤2。在步骤2中,选择X^1和X^3作为多项式系数,假设X^7。点击GenerateVHDL代码按钮,您将很快得到一条绿色消息“CodeisGenerated”

让我们假设它与您的代码惊人地相似(您应该检查整个代码),并告诉我们它在注释中产生了什么--lfsr(6:0)=1+x^3+x^7

多项式是否正确可能取决于比我发现的论文更权威的来源,更不用说你是否应该使用其他CRC7定义,多项式选择0x48(X^4而不是X^3)。维基百科上也有这样一个条目,表明你(我们)有正确的多项式。它有点像CRC

一旦你验证了你应该使用的多项式,你可以在OutputLogic.com上生成VHDL,抓取它,保存到一个文件中,因为它的实体名默认为crc,你可以编写一个测试台,用一个断言语句对不同的32位测试用例进行比较


或者,您可以通读这两个名称并进行比较(提示您可以更改其中一个名称并使用空格忽略差异)。

嗨,大卫,谢谢您的建议。但是如何理解生成的代码,因为我对如何生成该代码的波形感到困惑。我不知道如何理解CRC代码和/或确定特定字长(*紧急)。目前还不清楚您不了解什么,CRC码的一般情况,或者它们如何应用于特定的块大小。主题不在vhdl标记的权限范围内。请仔细阅读,直到您了解CRC过程。然后在纸上做一个小的。用VHDL语言构建小程序。做一个测试台来检查它。当它工作时,尝试全尺寸CRC。