Verilog-hdl求助

来源:百度知道 编辑:UC知道 时间:2024/06/01 09:09:45
CRC16并行算法的verilog - hdl程序,请问这个程序的控制引脚是什么啊?
如果按照下列要求,应该怎样修改程序:
reset初始化引脚, reset为高电平时, crc [ 7: 0 ] = 8’h00, crc_reg[ 15: 0 ] = 16’h0000。calc_valid为控制引脚,当calc_valid为高电平时,输入数据继续参与除法运算并将除法运算所得到的next_crc [ 15: 8 ]翻转后输出;当calc_valid为低电平时,输入数据不参与除法运算, crc_ reg高八位的值为前一个周期crc_reg值的低八位,低八位用0 补,并将crc _ reg[ 7: 0 ]的低八位翻转输出。

/*crc*/
module crc(crc_reg,crc,d,calc,init,d_valid,clk,reset);
output [15:0]crc_reg;
output [7:0]crc;
input [7:0]d;
input calc;
input init;
input d_valid;
input clk;
input reset;
reg [15:0]crc_reg;
reg [7:0]crc;
wire [15:0]next_crc;

always @(posedge clk or posedge reset)
begin
if(reset)
begin
crc_reg<=16'h0000;
crc<=8'h00;
end

else if(init)
begin
crc_reg<=16'h0000;
crc<=8'h00;
end

else if (calc & d_valid)
begin
crc_reg<=next_crc;

module crc(crc_reg,crc,d,calc_valid,clk,reset);
output [15:0]crc_reg;
output [7:0]crc;
input [7:0]d;
input calc_valid;
input clk;
input reset;
reg [15:0]crc_reg;
reg [7:0]crc;
wire [15:0]next_crc;

always @(posedge clk or posedge reset)
begin
if(reset)
begin
crc_reg<=16'h0000;
crc<=8'h00;
end

else if (calc_valid)
begin
crc_reg<=next_crc;
crc<=~{next_crc[8],next_crc[9],next_crc[10],next_crc[11],next_crc[12] ,next_crc[13] ,next_crc[14] ,next_crc[15]};
end

else
begin
crc_reg<={crc_reg[7:0],8'h00};
crc<=~{crc_reg[0], crc_reg[1], crc_reg[2], crc_reg[3], crc_reg[4],crc_reg[5], crc_reg[6], crc_reg[7]};
end
end

assign next_crc[0]=crc_reg[12]^d[7]^crc_reg[8]^d[3];
assign next_crc[1]=crc_reg[13]^d[6]^d[2]^crc_reg[9];
assign next_crc[2]=d[5]^crc_r