module hamming_code
#(
parameter [1-1:0] PARITY = 0 // 奇偶校验: "0" 偶校验,"1" 奇校验
)
(
input clk ,
input rst_n ,
input [4-1:0] sink_data,
output [7-1:0] source_data
);
reg [7-1:0] source_data_temp;
generate
if(PARITY == 0)begin
always @(posedge clk or negedge rst_n)begin
if(rst_n == 1'b0)begin
source_data_temp <= 7'b000_0000;
end
else begin
source_data_temp[2] <= sink_data[0];
source_data_temp[4] <= sink_data[1];
source_data_temp[5] <= sink_data[2];
source_data_temp[6] <= sink_data[3];
source_data_temp[0] <= (sink_data[0] ^ sink_data[1] ^ sink_data[3]);
source_data_temp[1] <= (sink_data[0] ^ sink_data[2] ^ sink_data[3]);
source_data_temp[3] <= (sink_data[1] ^ sink_data[2] ^ sink_data[3]);
end
end
end
else if(PARITY == 1)begin
always @(posedge clk or negedge rst_n)begin
if(rst_n == 1'b0)begin
source_data_temp <= 7'b000_0000;
end
else begin
source_data_temp[2] <= sink_data[0];
source_data_temp[4] <= sink_data[1];
source_data_temp[5] <= sink_data[2];
source_data_temp[6] <= sink_data[3];
source_data_temp[0] <= (sink_data[0] ^ sink_data[1] ^ sink_data[3]) ^ 1'b1;
source_data_temp[1] <= (sink_data[0] ^ sink_data[2] ^ sink_data[3]) ^ 1'b1;
source_data_temp[3] <= (sink_data[1] ^ sink_data[2] ^ sink_data[3]) ^ 1'b1;
end
end
end
endgenerate
assign source_data = source_data_temp;
endmodule
74汉明编码-Verilog
最新推荐文章于 2023-06-08 14:15:19 发布
该模块是一个用Verilog编写的Hamming编码器,根据参数PARITY(0表示偶校验,1表示奇校验)进行数据校验。在时钟上升沿或复位边沿触发,它接收4位输入数据(sink_data),并生成带有校验位的7位输出数据(source_data)。校验位计算基于输入数据的异或操作,确保数据传输的准确性。
摘要由CSDN通过智能技术生成