用verilog语言实现(8 4)汉明码编码器
答案:2 悬赏:30 手机版
解决时间 2021-02-23 21:09
- 提问者网友:送舟行
- 2021-02-23 04:33
用verilog语言实现(8 4)汉明码编码器
最佳答案
- 五星知识达人网友:雪起风沙痕
- 2021-02-23 06:05
//汉明码的译码电路设计;
module yima(data_in,data_out,jiaozhengzi,cuomawei);
//汉明码的输入输出参数有data_in,data_out,jiaozhengzi,cuomawei;
input [6:0] data_in; //输入参数data_in;
output [3:0] data_out; //输出参数data_out;
output [2:0] jiaozhengzi,cuomawei; //输出参数jiaozhengzi,cuomawei;
reg [3:0] data_out; //寄存器变量存放输出的数据;
reg [6:0] oo; //寄存器变量存放输入的数据;
reg [2:0] jzz; //寄存器变量存放校正子的值;
reg [2:0] cuomawei,jiaozhengzi; //寄存器变量存放错码位,校正子的值;
always @(data_in)
begin
oo=data_in; //将输入的码字付给寄存器变量oo;
jzz[2]=data_in[6]+data_in[5]+data_in[4]+data_in[2]; //计算jzz[2]的值;
jzz[1]=data_in[6]+data_in[5]+data_in[3]+data_in[1]; //计算jzz[1]的值;
jzz[0]=data_in[6]+data_in[4]+data_in[3]+data_in[0]; //计算jzz[0]的值;
if (jzz==3'b000) //在jzz[2:0]的值为000时;
begin
data_out[3:0]=data_in[6:3]; //输入的码字的高四位付给输出参数;
cuomawei=3'hz; //参数cuomawei为高组态;
end
else
case(jzz)
3'b001:oo[0]=~oo[0]; //jzz为001时oo[0]取反;
3'b010:oo[1]=~oo[1]; //jzz为010时oo[1]取反;
3'b100:oo[2]=~oo[2]; //jzz为100时oo[2]取反;
3'b011:oo[3]=~oo[3]; //jzz为011时oo[3]取反;
3'b101:oo[4]=~oo[4]; //jzz为101时oo[4]取反;
3'b110:oo[5]=~oo[5]; //jzz为110时oo[5]取反;
3'b111:oo[6]=~oo[6]; //jzz为111时oo[6]取反;
endcase
case(jzz)
3'b001:cuomawei=3'b000; //jzz为001时cuomawei取值为000;
3'b010:cuomawei=3'b001; //jzz为010时cuomawei取值为001;
3'b100:cuomawei=3'b010; //jzz为011时cuomawei取值为010;
3'b011:cuomawei=3'b011; //jzz为011时cuomawei取值为011;
3'b101:cuomawei=3'b100; //jzz为101时cuomawei取值为100;
3'b110:cuomawei=3'b101; //jzz为110时cuomawei取值为101;
3'b111:cuomawei=3'b110; //jzz为111时cuomawei取值为110;
endcase
data_out[3:0]=oo[6:3]; //data_out取改变后的oo的高四位;
jiaozhengzi=jzz; //jzz的值赋给输出参数jiaozhengzi;
end
endmodule
module yima(data_in,data_out,jiaozhengzi,cuomawei);
//汉明码的输入输出参数有data_in,data_out,jiaozhengzi,cuomawei;
input [6:0] data_in; //输入参数data_in;
output [3:0] data_out; //输出参数data_out;
output [2:0] jiaozhengzi,cuomawei; //输出参数jiaozhengzi,cuomawei;
reg [3:0] data_out; //寄存器变量存放输出的数据;
reg [6:0] oo; //寄存器变量存放输入的数据;
reg [2:0] jzz; //寄存器变量存放校正子的值;
reg [2:0] cuomawei,jiaozhengzi; //寄存器变量存放错码位,校正子的值;
always @(data_in)
begin
oo=data_in; //将输入的码字付给寄存器变量oo;
jzz[2]=data_in[6]+data_in[5]+data_in[4]+data_in[2]; //计算jzz[2]的值;
jzz[1]=data_in[6]+data_in[5]+data_in[3]+data_in[1]; //计算jzz[1]的值;
jzz[0]=data_in[6]+data_in[4]+data_in[3]+data_in[0]; //计算jzz[0]的值;
if (jzz==3'b000) //在jzz[2:0]的值为000时;
begin
data_out[3:0]=data_in[6:3]; //输入的码字的高四位付给输出参数;
cuomawei=3'hz; //参数cuomawei为高组态;
end
else
case(jzz)
3'b001:oo[0]=~oo[0]; //jzz为001时oo[0]取反;
3'b010:oo[1]=~oo[1]; //jzz为010时oo[1]取反;
3'b100:oo[2]=~oo[2]; //jzz为100时oo[2]取反;
3'b011:oo[3]=~oo[3]; //jzz为011时oo[3]取反;
3'b101:oo[4]=~oo[4]; //jzz为101时oo[4]取反;
3'b110:oo[5]=~oo[5]; //jzz为110时oo[5]取反;
3'b111:oo[6]=~oo[6]; //jzz为111时oo[6]取反;
endcase
case(jzz)
3'b001:cuomawei=3'b000; //jzz为001时cuomawei取值为000;
3'b010:cuomawei=3'b001; //jzz为010时cuomawei取值为001;
3'b100:cuomawei=3'b010; //jzz为011时cuomawei取值为010;
3'b011:cuomawei=3'b011; //jzz为011时cuomawei取值为011;
3'b101:cuomawei=3'b100; //jzz为101时cuomawei取值为100;
3'b110:cuomawei=3'b101; //jzz为110时cuomawei取值为101;
3'b111:cuomawei=3'b110; //jzz为111时cuomawei取值为110;
endcase
data_out[3:0]=oo[6:3]; //data_out取改变后的oo的高四位;
jiaozhengzi=jzz; //jzz的值赋给输出参数jiaozhengzi;
end
endmodule
全部回答
- 1楼网友:怀裏藏嬌
- 2021-02-23 06:40
你们是做通信课程设计吗??不是科大的吧
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯