硬件描述语言范例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
硬件描述语言语言设计实例
1、8-3编码器
module encode_verilog ( a ,b );
input [7:0] a ; //编码器输入
wire [7:0] a ;
output [2:0] b ; //编码器输出
reg [2:0] b;
always @ ( a )
begin
case ( a ) //编码器某一输入端口为高电平输出相应的3位二进制数
8'b0000_0001 : b<=3'b000; //0
8'b0000_0010 : b<=3'b001; //1
8'b0000_0100 : b<=3'b010; //2
8'b0000_1000 : b<=3'b011; //3
8'b0001_0000 : b<=3'b100; //4
8'b0010_0000 : b<=3'b101; //5
8'b0100_0000 : b<=3'b110; //6
8'b1000_0000 : b<=3'b111; //7
default : b<= 3'b000; //其他情况编码器输出3’b000
endcase
end
endmodule
2、8-3优先编码器
module p_encode_verilog ( A ,I ,GS ,EO ,EI ); //编码器以低为有效
input [7:0] I ; //编码器输入
wire [7:0] I ;
input EI ; //输入使能,EI=0时,编码器正常工作
wire EI ;
output [2:0] A ; //编码器输出
reg [2:0] A ;
output GS ; //优先编码器工作状态标志,编码器的八个输入端有信号输入时,GS=0 reg GS ;
output EO ; //输出使能,
reg EO ;
always @ ( I or EI )
if ( EI ) //使用if、else if表明条件的优先级顺序
begin
A <= 3'b111;
GS <= 1;
EO <= 1;
end
else if ( I[7] == 0 )
begin
A <= 3'b000;
GS <= 0;
EO <= 1;
end
else if ( I[6] == 0 )
begin
A <= 3'b001;
GS <= 0;
EO <= 1;
end
else if ( I[5] == 0 )
begin
A <= 3'b010;
GS <= 0;
EO <= 1;
end
else if ( I[4] == 0 )
begin
A <= 3'b011;
GS <= 0;
EO <= 1;
end
else if ( I[3] == 0 )
begin
A <= 3'b100;
GS <= 0;
EO <= 1;
end
else if ( I[2] == 0 )
begin
A <= 3'b101;
GS <= 0;
EO <= 1;
end
else if ( I[1] == 0 )
begin
A <= 3'b110;
GS <= 0;
EO <= 1;
end
else if ( I[0] == 0 )
begin
A <= 3'b111;
GS <= 0;
EO <= 1;
end
else if ( I == 8'b11111111)
begin
A <= 3'b111;
GS <= 1;
EO <= 0;
end
endmodule
3、3-8译码器
module decoder_verilog ( G1 ,Y ,G2 ,A ,G3 ); input G1 ; //使能输入,高有效
wire G1 ;
input G2 ; //使能输入,低有效
wire G2 ;
input [2:0] A ; //3位译码器输入,为高有效wire [2:0] A ;
input G3 ; //使能输入
wire G3 ; //使能输入,低有效
output [7:0] Y ; //8位译码器输出,为低有效reg [7:0] Y ;
reg s;
always @ ( A ,G1, G2, G3)
begin
s <= G2 | G3 ;
if ( G1 == 0) //G1为低有效
Y <= 8'b1111_1111;
else if ( s)
Y <= 8'b1111_1111;
else
case ( A )
3'b000 : Y<= 8'b1111_1110;
3'b001 : Y<= 8'b1111_1101;
3'b010 : Y<= 8'b1111_1011;
3'b011 : Y<= 8'b1111_0111;
3'b100 : Y<= 8'b1110_1111;
3'b101 : Y<= 8'b1101_1111;
3'b110 : Y<= 8'b1011_1111;
3'b111 : Y<= 8'b0111_1111;
endcase
end
endmodule
4、数据选择器
module mux8_1_verilog ( Y ,A ,D0, D1,
D2, D3, D4, D5, D6, D7 ,G );