verilog编程之路

verilog编程之路

assign
assgin a = b&c;//assign语句一般用于组合逻辑的赋值。
always

always@(posedge cp)
begin if(clr) a<=0;
else q<=d;
end

always 用于描述组合逻辑,也可以用于描述时序逻辑。
用行为描述2——4线译码器

module _2to4decoder(Y,A1,A2,E);
input A1,A0,E;
output [3:0] Y;
reg[3:0]Y;//在非阻塞赋值时候,被赋值的变量必须是reg类型。
	//2.时序逻辑大多数情况是并行执行,用非阻塞赋值,此时begin···end语句的作用只是相当于函数的花括号,
	//将一段语句划分成块,但是在块里语句依然是并行执行的,在一个模块完成时会同时执行,
	//所以在非阻塞赋值中begin···end语句并非顺序执行的。
	always@(*)
	if(~E)Y = 4'b1111;//如果不使能,则4个引脚均无效
	else
	begin
	case{(A1,A0)}//位拼接运算符
	2'b00:Y<=4'b1110;
	2'b01:y<=4'b1101;
	2‘b10:y<=4'b1011;
	b'b11:y<=4'b0111;
	default:y<=4'bx;//高阻态
	endcase 
	end
endmodule

//行为描述实现4选一数据选择器

module mux4_1(out,in0,in1,in2,in3,s0,s1);
input in0,in1,in2,in3;
output out;
reg out;
always@(*)
case{(s1,s0)}
2'b00;out <= in0;
2'b01:out <= in1;
2'b10:out <= in2;
2'b11:out <= in3;
default:out<=1'bx;
endcase
endmodule

//数据流描述,多用于组合逻辑电路,他由assign开始,后面跟着由操作数和运算符组成的逻辑表达式
//数据流描述的四选一数据选择器

module mux4_1(out,in0,in1,in2,in3,s0,s1);
input in0,in1,in2,in3,s0,s1;
output out;
assign out = (in0&~s1&~s0)|(in1&~s1&s0)|(in2&s1&~s2)|(in3&s1&s2);
endmodule

//数据流描述2——4线译码器

module _2to4(Y,A1,A0,E)
input A1,A0,E;
output [3:0] Y;
assign Y[0] = ~(~A0&~A1&~E); 
assign Y[1] = ~(~A0&A1&~E); 
assign Y[2] = ~(A0&~A1&~E); 
assign Y[3] = ~(A0&A1&~E); 
endmodule

//组合逻辑电路的verilog建模
//采用行为描述语言编写3——8译码器

module _3to8(Y,E,A)
input [2:0] E,A;
output [7:0] Y;
reg [7:0]Y;
wire B;
assign B = E[2]&~E[1]&~E[0];
always@(*)
begin 
if(~B)Y = 8'b11111111;
	else
	case{(A}
	3b'000:Y = 8b'11111110;
	3b'001:Y = 8b'11111101;
	3b'010:Y = 8b'11111011;
	3b'011:Y = 8b'11110111;
	3b'100:Y = 8b'11101111;
	3b'101:Y = 8b'11011111;
	3b'110:Y = 8b'10111111;
	3b'111:Y = 8b'01111111;
	default:Y = 8b'11111111;
endcase
end
endmodule

//数据选择器(8选一)

module mux8_1(Y,E,S,D)
input [7:0]D;
input [2:0]S;
input E;
output reg Y;
always@(*)
begin 
if(~E)Y = 0;
else 
case(S)
	3'b000:Y = D[0];
	3'b001:Y = D[1];
	3'b010:Y = D[2];
	3'b011:Y = D[3];
	3'b100:Y = D[4];
	3'b101:Y = D[5];
	3'b110:Y = D[6];
	3'b111:Y = D[7];
	default:Y = 0;
endcase
end
endmodule
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值