⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc.txt

📁 循环冗余校验码CRC的VerilogHDL源程序
💻 TXT
字号:
Module crc5(clk,
            rst_n,
            sdata,
            dload, 
            datacrco,
            hsend,
            datacrci,
            hrecv,rdata,
            dfinish,
            error);
input       clk;
input       rst_n;
input[11:0] sdata;
input       dload;
output[16:0] datacrco;
output      hsend;
input[16:0] datacrci;
input       hrecv;
output[11:0] rdata;
output      dfinish;
output      error;
reg[16:0]   datacrco_r;
reg         hsend_r;
reg[11:0]   rdata_r;
reg         dfinish_r;
reg         error_r;
reg[11:0]   dtemp;
reg[11:0]   sdtemp;
reg[11:0]   rdtemp;
reg[16:0]   rdatacrc;
parameter   polynomial = 6'b110101;
assign datacrco = datacrco_r;
assign hsend = hsend_r;
assign rdata = rdata_r;
assign dfinish = dfinish_r;
assign error = error_r;

always @ (posedge clk or negedge rst_n)
begin
    if(!rst_n)
    begin
        hsend_r = 1'b0;
        datacrco_r = 17'd0;
    end
    else if(dload == 1'b1)
    begin
        if(dtemp[11]) dtemp[11:6] = dtemp[11:6] ^ polynomial;
        if(dtemp[10]) dtemp[10:5] = dtemp[10:5] ^ polynomial;
        if(dtemp[9]) dtemp[9:4] = dtemp[9:4] ^ polynomial;
        if(dtemp[8]) dtemp[8:3] = dtemp[8:3] ^ polynomial; 
        if(dtemp[7]) dtemp[7:2] = dtemp[7:2] ^ polynomial;
        if(dtemp[6]) dtemp[6:1] = dtemp[6:1] ^ polynomial;
        if(dtemp[5]) dtemp[5:0] = dtemp[5:0] ^ polynomial;
        datacrco_r = {sdtemp,dtemp[4:0]};
        hsend_r = 1'b1;
    end
    else
        hsend_r = 1'b0;
end
always @ (posedge clk or negedge rst_n)
begin
    if(!rst_n)
    begin
        rdata_r =12'd0; 
        dfinish_r = 1'b0;
        error_r = 1'b0;
    end
    else if(hrecv == 1'b1)
    begin
        rdatacrc = datacrci;
        rdtemp = datacrci[16:5];
        if(rdtemp[11]) rdtemp[11:6] = rdtemp[11:6] ^ polynomial;
        if(rdtemp[10]) rdtemp[10:5] = rdtemp[10:5] ^ polynomial;
        if(rdtemp[9]) rdtemp[9:4] = rdtemp[9:4] ^ polynomial;
        if(rdtemp[8]) rdtemp[8:3] = rdtemp[8:3] ^ polynomial; 
        if(rdtemp[7]) rdtemp[7:2] = rdtemp[7:2] ^ polynomial;
        if(rdtemp[6]) rdtemp[6:1] = rdtemp[6:1] ^ polynomial;
        if(rdtemp[5]) rdtemp[5:0] = rdtemp[5:0] ^ polynomial;
        if(rdtemp[4:0] ^ rdatacrc[4:0] == 5'd0)
        begin
            rdata_r = rdatacrc[16:5];
            dfinish_r = 1'b1;
        end
        else
        begin
            rdata_r = 12'd0;
            error_r = 1'b1;
        end
    end
    else
        dfinish_r = 1'b0;
end
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -