参考:Verilog数字VLSI设计教程
硬件描述语言Verilog
Verilog HDL数字设计与综合
Verilog HDL 数字集成电路高级程序设计
6. 组合逻辑电路
当一个数字电路中的输出信号完全是由输入信号所决定时,这样的电路称之为组合电路
组合电路基本设计方式
1. 数据比较器
1位数据比较器
Verilog设计代码如下:
module comp_1b(a,b,agb,aeb,alb);
input a,b;
output agb,aeb,alb;
wire agb,aeb,alb;
assign agb=a&(~b);
assign aeb=a^~b;
assign alb=(~a)&b;
endmodule
测试环境如下:
module comp_1b_tb;
reg a,b;
wire agb,aeb,alb;
comp_1b U1(.a(a),.b(b),.agb(agb),.aeb(aeb),.alb(alb));
initial
begin
a=1'b1;b=1'b1;
#100 a=1'b0;
#100 a=1'b1;b=1'b0;
#100 a=1'b0;
#100 b=1'b1;
#200 $finish;
end
endmodule
设计一个8位数据比较器
module comp_8b(a,b,agb,aeb,alb);
parameter w=8;
input [w-1:0]a,b;
output agb,aeb,alb;
reg agb,aeb,alb;
always@(a or b)
if(a>b) {
agb,aeb,alb}=3'b100;
else if(a<b) {
agb,aeb,alb}=3'b001;
else {
agb,aeb,alb}=3'b010;
endmodule
module comp_8b_tb;
reg [7:0]a,b;
wire agb,aeb,alb;
comp_8b U3(.a(a),.b(b),.agb(agb),.aeb(aeb),.alb(alb));
initial
begin
a=8'b00110101;b=8'b00110100;
#100 a=8'b00110011;b=8'b00110011;
#100 a=8'b00110011;b=8'b10110011;
#100 a=8'b11110011;b=8'b01110011;
#100 a=8'b01100110;b=8'b01100110;
#100 a=8'b00110000;b=8'b11000011;
#100 a=8'b00111111;b=8'b00000000;
#200 $finish;
end
endmodule
2. 数据选择器
设计一个MUX2to1
module mux2to1(d_in,d_out,sel);
input [1:0]d_in;
input sel;
output d_out;
wire d_out;
assign d_out=sel?d_in[1]:d_in[0];
endmodule
或者
module mux2to1_1(d_in,d_out,sel);
input [1:0]d_in;
input sel;
output d_out;
reg d_out;
always @(d_in or sel)
begin
if(sel) d_out=d_in[1];
else d_out=d_in[0];
end
endmodule
module mux2to1_tb;
reg[1:0]d_in;
reg sel;
wire d_out;
mux2to1 U2(.d_in(d_in),.d_out(d_out),.sel(sel));
initial
begin
d_in=2'b10;sel=1'b0;
#100 sel=1'b1;
#100 d_in=2'b11;
#100 sel