End of Best.
by WeiLin
设x为正数(最高位为符号位0),则:
x反码/x补码:x
-x反码:2^n-1-x
-x补码:2^n-x
小数的二进制表示:乘2,取整数部分作第1个bit,取小数部分再乘2,以此类推,直到小数为0(或达到精度要求)
0.675*2=1.25 ——1
0.25*2 = 0.5 ——0
0.5*2=1 ——1
(0.675)10=(0.101)2
小数的原/补码与整数一样,注意补码加1,是在小数的最低位加1:
(127.375)10=(0111_1111.011)2
(-127.375)10=(1111_1111.011)2/原码
(-127.375)10=(1000_0000.101)2/补码
编码有很多,这里介绍比较简单的BCD码,其全称为Binary-Coded-Decimal,即用二进制编码十进制,所以BCD码是用4位2进制数表示0~9,也就是4-10译码器。
其有3种实现方式:1.移位;2.case语句;3.门结构。详细代码如下:
//BCD_decoder.v//
//BCD译码器,也就是4-10译码器
//3种方法:1.移位;2.case语句;3.门结构
module bcd_decoder(
input [3:0] in,
output[9:0] out
);
//方法1:1左移相应位
//assign out=1<<in;
//方法2:case语句
reg [9:0] out_reg;
always@(*)begin
case(in)
0:out_reg=10'b00_0000_0001;
1:out_reg=10'b00_0000_0010;
2:out_reg=10'b00_0000_0100;
3:out_reg=10'b00_0000_1000;
4:out_reg=10'b00_0001_0000;
5:out_reg=10'b00_0010_0000;
6:out_reg=10'b00_0100_0000;
7:out_reg=10'b00_1000_0000;
8:out_reg=10'b01_0000_0000;
9:out_reg=10'b10_0000_0000;
default:out_reg=10'b00_0000_0000;
endcase
end
assign out=out_reg;
//方法3:门结构
// assign out[0]= ~in[3] & ~in[2] & ~in[1] & ~in[0];
// ...
// assign out[9]= in[3] & ~in[2] & ~in[1] & in[0];
endmodule