Binary-Coded Decimal,用四位二进制数来表示一位十进制(0-9)的编码形式。
需要注意的是,在使用Verilog语句设计组合逻辑电路时(coding style的问题),尽量选择使用assign语句来代替always语句块。尤其是对于if-else语句来说使用 assign = ? : 条件选择语句设计出来的电路会更优,因为if-else语句可能会向下一级传播不定态。 造成逻辑电路错误。
————————————————
module Decode_4_10( data_in, data_out ); input [3:0]data_in; output [9:0]data_out; //output reg [9:0]data_out; /* always@(*) case(data_in) 4'b0000:data_out=10'b1111_1111_10; 4'b0001:data_out=10'b1111_1111_01; 4'b0010:data_out=10'b1111_1110_11; 4'b0011:data_out=10'b1111_1101_11; 4'b0100:data_out=10'b1111_1011_11; 4'b0101:data_out=10'b1111_0111_11; 4'b0110:data_out=10'b1110_1111_11; 4'b0111:data_out=10'b1101_1111_11; 4'b1000:data_out=10'b1011_1111_11; 4'b1001:data_out=10'b0111_1111_11; default:data_out=10'b1111_1111_11; endcase */ //assign description assign data_out[0]=~(~data_in[3]& ~data_in[2]& ~data_in[1]& ~data_in[0]); assign data_out[1]=~(~data_in[3]& ~data_in[2]& ~data_in[1]& data_in[0]); assign data_out[2]=~(~data_in[3]& ~data_in[2]& data_in[1]& ~data_in[0]); assign data_out[3]=~(~data_in[3]& ~data_in[2]& data_in[1]& data_in[0]); assign data_out[4]=~(~data_in[3]& data_in[2]& ~data_in[1]& ~data_in[0]); assign data_out[5]=~(~data_in[3]& data_in[2]& ~data_in[1]& data_in[0]); assign data_out[6]=~(~data_in[3]& data_in[2]& data_in[1]& ~data_in[0]); assign data_out[7]=~(~data_in[3]& data_in[2]& data_in[1]& data_in[0]); assign data_out[8]=~( data_in[3]& ~data_in[2]& ~data_in[1]& ~data_in[0]); assign data_out[9]=~( data_in[3]& ~data_in[2]& ~data_in[1]& data_in[0]); endmodule
`timescale 1ns/1ns module tb; reg [3:0]data_in; wire [9:0]data_out; Decode_4_10 Decode_4_10( .data_in(data_in), .data_out(data_out) ); initial begin data_in=0; #100; data_in=1; #100; data_in=2; #100; data_in=3; #100; data_in=4; #100; data_in=5; #100; data_in=6; #100; data_in=7; #100; data_in=8; #100; data_in=9; #100; end endmodule