-1

私のコードがこれに対して正しいかどうかを確認したい

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;
4

1 に答える 1

0

表 3 では、 CRC7の反転を多項式選択 0x44 として指定しており 1+x^3+x^7.

OutputLogic.com には、Verilog または VHDL のいずれかを出力するCRC ジェネレーターがあります。ステップ 1、データ幅を 32 に設定し、多項式幅を 7 に設定します。CRC7 は事前定義されたケースの 1 つではないため (クラス割り当てのように聞こえます)、プロトコルはユーザー定義です。適用ボタンを押して、ステップ 2 を選択します。ステップ 2 では、多項式係数として X^1 と X^3 を選択します。X^7 が想定されます。[Generate VHDL Code] ボタンをクリックすると、すぐに「コードが生成されました」という緑色のメッセージが表示されます。

それがあなたのコードと驚くほど似ているとしましょう (そして、全体をチェックする必要があります)。そして、それが何を生成したかをコメントで教えてくれます -- lfsr(6:0)=1+x^3+x^7;

ここに画像の説明を入力

多項式が正しいかどうかは、他の CRC7 定義である多項式選択 0x48 (X^3 ではなく X^4) を使用する必要があるかどうかについては言及していませんが、私が見つけた論文よりも信頼できる情報源に依存する可能性があります。巡回冗長検査に関するウィキペディアのエントリもあり、あなた (私たち) が正しい多項式を持っていることを示しています。CRCとは何かについて少し説明します。

使用する多項式を確認したら、OutputLogic.com で VHDL を生成し、それを取得してファイルに保存できます。エンティティの名前はデフォルトで crc であるため、アサーション ステートメントで 2 つを比較するテストベンチを作成できます。さまざまな 32 ビット テスト ケース用。

または、2 つを読んで比較することもできます (一方の名前を変更し、diff を無視して空白を実行できることを示唆しています)。

于 2013-07-26T07:23:22.050 に答える