目录
一、verilog模型
verilog模型可以是电路不同级别的抽象,一共分为五级,分别是:
1.系统级(system-level):使用语言提供高级结构以实现设计模块外部功能的模型;
2.算法级(algorithm-level):使用语言提供高级结构实现算法运行的模型;
3.RTL级(register transfer level):描述数据在寄存器间流动的模型;
4.门级(gate-level):描述逻辑门之间连接的模型;
5.开关级(switch-level):描述器件中三极管和存储节点及他们之间连接的模型。
其中3与逻辑电路有明确关联,4、5与具体物理电路相关。
二、逻辑编写与RTL模型的关系
以下已三种不同方式编写的二选一多路选择器为例,我们设置两个输入信号a,b,一个选择信号sl,一个输出信号out。当选择信号sl为真(高电平1)时,输出out与b信号相同,反之则与a相同。
2.1 二选一多路选择器(1)
源码:
`timescale 1ns / 1ps
module muxtwo_sour(
input clk,
input a,
input b,
input sl,
output out
);
reg out;
always @ (sl or a or b)
if(!sl) out = a;
else out = b ;
endmodule
RTL模型:
仿真代码:
`timescale 1ns / 1ps
module muxtwo_sim;
reg clk;
reg sl;
reg a,b;
initial
begin
clk = 1'b0;
sl = 1'b1;
a = 1'b1;
b = 0'b0;
end
always#10 clk = ~clk;//50Mhz
always@(posedge clk) sl=~sl;
muxtwo_sour dut
(
.clk (clk) ,
.sl (sl),
.a(a),
.b(b)
);
endmodule
该二选一多路选择我添加了输入信号clk(50MHz时钟)用于做仿真时sl信号的变化标尺。
仿真波形:
2.2 二选一多路选择器(2)
源码:
`timescale 1ns / 1ps
module muxtwo_sour(
input clk,
input a,
input b,
input sl,
output out
);
wire nsl,sela,selb;
assign nsl = ~sl;
assign sela = a & nsl;
assign selb = b & sl;
assign out = sela | selb;
endmodule
RTL模型:
仿真代码及波形同上
2.3 二选一多路选择器(3)
源码:
`timescale 1ns / 1ps
module muxtwo_sour(
input clk,
input a,
input b,
input sl,
output out
);
not u1(nsl,sl);//not非门,将sl取非存入nsl
and #1 u2(sela,a,nsl);//#1 延迟一个时间单位
and #1 u3(selb,b,sl);
or #1 u4(out,sela,selb);
endmodule
RTL模型:
仿真代码及波形同上
对比二选一多路选择器(1)(2)(3),在计算机运行时可以将(1)通过工具由(2)作为中间形式综合到(3),而(3)几乎与工艺元器件逐一对应,再通过布局布线工艺可将其转化为具体工艺电路布线结构。
三、仿真波形
《Verilog数字系统设计教程》夏宇闻著例【2.8】还给出一种仿真波形写法:
`timescale 1ns / 1ps
//`include "muxtwo_sour"
module muxtwo_test_sour;
reg ain,bin,select;
reg clock;
wire outtw;
initial
begin
ain=0;
bin=0;
select=0;
clock=0;
end
always #50 clock=~clock;
always@(posedge clock)
begin //{$random}产生随机数
#1 ain={$random}%2; //产生随机信号流ain与bin,%2模运算
#3 bin={$random}%2; //分别延迟1个时间单位与3个时间单位随机产生信号流ain与bin
end
always #10000 select = !select;
muxtwo_sour m //实例引用多路器并加入测试信号流
(
.out(outtw),
.a(ain),
.b(bin),
.sl(select)
);
endmodule
该处,muxtwo是定义好的模块,(.out(outtw),.a(ain),.b(bin),.sl(select))将测试信号流赋予muxtwo_sour模块。
测试波形
注:该篇所有案例均改自夏宇闻老师编著的《Verilog数字系统设计教程》,推荐使用该书作为Verilog入门教程。
工程文件获取:链接:https://pan.baidu.com/s/1SwCVBm7oExUQZSxEZVYyQQ
提取码:z6u0