在modesim里仿真的,下面是测试程序与crc写在一起的.v文件。
输入数据是12'b101011010101,生成多项式为x^5 + x^4 + x^2 + 1
手动算出来是01101,想用串行的方法,结果没做出来,请帮忙看看问题在哪
module crc;
reg [11:0] data_in;
reg [3:0]i;
reg clk;
reg rstn;
reg calc_finish;
reg crcfb;
reg [4:0]CRC_Reg;
always #50 clk = ~clk;
initial begin
data_in = 12'b101011010101;
rstn = 0;
clk = 0;
CRC_Reg = 0;
crcfb = 0;
#100;
rstn = 1;
#5000 $stop;
end
always @ (posedge clk or negedge rstn)
if(!rstn) begin
i <= 11;
calc_finish <= 1;
CRC_Reg <= 0;
end
else begin
if(i != 0)
i <= i - 1;
else
calc_finish <= 0;
if(calc_finish) // x^5 + x^4 + x^2 + 1
begin
crcfb <=CRC_Reg[4];
CRC_Reg[4]<=CRC_Reg[3]^crcfb;
CRC_Reg[3]<=CRC_Reg[2];
CRC_Reg[2]<=CRC_Reg[1]^crcfb;
CRC_Reg[1]<=CRC_Reg[0];
CRC_Reg[0]<=data_in
^crcfb;
end
end
endmodule
此帖出自小平头技术问答
一周热门 更多>