1、半加器
Verilog描述:
module h_adder(A,B,SO,CO) ;
input A,B;
output SO,CO;
assign SO = A ^ B ;
assign CO = A & B ;
endmodule
assign并行语句,同时执行,与语句的前后顺序无关
Verilog规定所有关键词必须小写
2、多路选择器
(1)always语句
module MUX41a(a,b,c,d,s1,s0,y) ;
input a,b,c,d,s1,s0;
output y;
reg y;
always@(a or b or c or d or s1 or s0)
begin : MUX41a //块语句开始
case({s1,s0})
2'b00: y<=a;
2'b01: y<=b;
2'b10: y<=c;
2'b11: y<=d;
default: y<=a;
endcase
end
endmodule
reg型变量用于定义特定类型的变量(寄存器型变量),只用于always过程语句中
wire网线型用于assign引导的幅值语句
任何变量可能有4种不同的逻辑状态:
符号” <= “是赋值符号,只能英语顺序语句(always),” = “只能用在assign引导的并行语句中。
(2)assign语句表述4选一
module MUX41a(a,b,c,d,s1,s0,y) ;
input a,b,c,d,s1,s0;
output y;
wire [1:0] SEL;
wire AT,BT,CT,DT;
assign SEL = {s1,s0}; //对s1,s0进行并位操作
assign AT = (SEL==2'D0); //逻辑判断,SEL成立,AT为1,反之为0
assign BT = (SEL==2'D1);
assign CT = (SEL==2'D2);
assign DT = (SEL==2'D3);
assign y = (a&AT)|(b&BT)|(c&CT)|(d&DT);
endmodule
数字表达:b二进制,D十进制,O八进制,H十六进制
wire可以直接表达assign语句。
(3)wire语句表达4选一
module MUX41a(a,b,c,d,s1,s0,y) ;
input a,b,c,d,s1,s0;
output y;
wire AT = s0 ? d : c ;
wire BT = s0 ? b : a ;
wire y = (s1 ? AT : BT) ;
endmodule
(4)条件语句表述
module MUX41a(a,b,c,d,s1,s0,y);
input a,b,c,d,s1,s0;
output y;
reg[1:0] SEL;
reg y;
always@(a,b,c,d,SEL)
begin
SEL = {s1,s0};
if(SEL==0) y=a;
else if(SEL==1) y=b;
else if(SEL==2) y=c;
else if(SEL==3) y=d;
end
endmodule
if条件语句,顺序执行语句块(begin-end)