verilog入门篇(1)——模块基本特性

目录

一、verilog模型

二、逻辑编写与RTL模型的关系

2.1 二选一多路选择器(1)

2.2 二选一多路选择器(2)

2.3 二选一多路选择器(3)

三、仿真波形


一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

钱多多小姐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值