|
用第二种方法实现BCD转二进制之后,我们来用第三种方法实现。
根据实现原理,改写bcd2b.v代码如下。
其中包含十进位子模块power10.v。
module bcd2b (din, dout);
input [23:0] din;
output [19:0] dout;
wire [43:0] data [6:0];
assign data[0] = {20'b0, din};
// operation power10 : ab = a*10 + b
power10 s1 (.datain(data[0]), .dataout(data[1]));
power10 s2 (.datain(data[1]), .dataout(data[2]));
power10 s3 (.datain(data[2]), .dataout(data[3]));
power10 s4 (.datain(data[3]), .dataout(data[4]));
power10 s5 (.datain(data[4]), .dataout(data[5]));
power10 s6 (.datain(data[5]), .dataout(data[6]));
assign dout = data[6][43:24];
// assign dout = din[3:0] // BCD0
// + (din[7:4]<<3) + (din[7:4]<<1) // BCD1, 10=8+2
// + (din[11:8]<<6) + (din[11:8]<<5) + (din[11:8]<<2) // BCD2, 100=64+32+4
// + (din[15:12]<<10) - (din[15:12]<<4) - (din[15:12]<<3) // BCD3, 1000=1024-16-8
// // BCD4, 10000 = 16*625 = 8192+2048-256+16
// + (din[19:16]<<13) + (din[19:16]<<11) - (din[19:16]<<8) + (din[19:16]<<4)
// // BCD5, 100000 = 32*3125 = 32*(2048+1024+32+16+4+1) = 65536+32768+1024+512+128+32
// + (din[23:20]<<16) + (din[23:20]<<15) + (din[23:20]<<10)
// + (din[23:20]<<9) + (din[23:20]<<7) + (din[23:20]<<5);
endmodule
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?我要注册
x
|