Verilog语法之模块巩固(3)(实例练习篇)

        最近上手一个新项目,工期有点赶,收到很多同学私信催续更,加班加点的终于差不多完事了,开始了心心念念的续更,在这里谢谢大家的支持。

        上一张对模块概念和调用作了详细描述,本文主要对模块调用进行巩固,基础模块比如触发器、计数器、选择器都是构建复杂模块的基本单元,这些基础得打牢,建议大家一定要多看代码,下面就带大家一起实战操作。

        需要注意的点都在代码里面作了说明,还有问题的可以私信我,我会统一时间回复。

1.“与-或-非”门电路

module AOI(A,B,C,D,F); 
//模块名为 AOI(端口列表 A,B,C,D,F) 
input A,B,C,D; 
//模块的输入端口为 A,B,C,D 
output F; 
//模块的输出端口为 F
wire A,B,C,D,F; 
//定义信号的数据类型 
assign F= ~((A&B)|(C&D)); //逻辑功能描述 
endmodule

2.4 选 1 数据选择器(case 语句)

module mux4_1(out,in0,in1,in2,in3,sel); 
output out; 
input in0,in1,in2,in3; 
//默认wire型
input[1:0] sel; 
reg out; 
/*
如果output作为过程赋值语句的左值,则应该用reg类型;
如果output作为连续赋值语句的左值,则应该用wire类型。
*/
always @(in0 or in1 or in2 or in3 or sel) //敏感信号列表 
case(sel) 
2'b00: out=in0; 
2'b01: out=in1; 
2'b10: out=in2; 
2'b11: out=in3; 
default: out=2'bx; 
endcase 
endmodule

3.4 位全加器

module adder4(cout,sum,ina,inb,cin); 
output[3:0] sum; 
output cout; 
input[3:0] ina,inb; 
input cin; 
assign {cout,sum}=ina+inb+cin; 
endmodule 

4.4 位计数器

module count4(out,reset,clk);
output[3:0] out;
input reset,clk;
reg[3:0] out;
always @(posedge clk)
begin
if (reset) out<=0; 
//同一个时钟下为同步复位
else out<=out+1; 
//计数
 end
endmodule

5.同步置数、同步清零的计数器

module count(out,data,load,reset,clk);
output[7:0] out;
input[7:0] data;
input load,clk,reset;
reg[7:0] out;
always @(posedge clk) //clk 上升沿触发
begin
if (!reset) out = 8'h00; //同步清 0,低电平有效
else if (load) out = data; //同步预置
else out = out + 1; //计数
end
endmodule

5.简单算术逻辑单元

`define add 3'd0
`define minus 3'd1
`define band 3'd2
`define bor 3'd3
`define bnot 3'd4

module alu(out,opcode,a,b);
output[7:0] out;
reg[7:0] out;
input[2:0] opcode; //操作码
input[7:0] a,b; //操作数
always@(opcode or a or b) //电平敏感的 always 块
begin
case(opcode)
`add: out = a+b; //加操作
`minus: out = a-b; //减操作
`band: out = a&b; //求与
`bor: out = a|b; //求或
`bnot: out=~a; //求反
default: out=8'hx; //未收到指令时,输出任意态
endcase
end
endmodule

------->4位全加器和4位计数器的testbench仿真程序+上述程序包自取(0积分下载):https://download.csdn.net/download/JY6669991010/86812736

------->下一章:Verilog详解语法之数据类型及其常量和变量-待更新

章节进程条-STEP1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机探索者bea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值