学习使用Vivado和SDK进行Xilinx ZYNQ FPGA开发 | (十二)Verilog程序设计举例 | 2023.11.6/星期一/天气晴

系列文章目录

专栏系列文章:学习Xilinx ZYNQ FPGA开发



摘要

在上一次的学习内容《Vivado建立工程》的基础上,我已经有一个工程了,现在以1位全加器的设计过程来举例说明Verilog HDL程序的设计以及在Vivado上进行程序设计的过程。包括:

  • 编写Verilog代码
  • 仿真
  • RTL分析

一、设计思路

根据真值表进行简化,1位二进制全加器可以由两个半加器和一个或门组成,因此使用自底向上的设计方法,先分别进行底层的或门模块my_or2.v和半加器模块h_adder.v的设计,再进行顶层的1位全加器h_adder.v的设计。
在这里插入图片描述

二、创建Verilog源文件

创建并添加3个源文件
在这里插入图片描述
在Design Sources里右键f_adder.v,选择Set as Top,将f_adder.v设为Top文件。
在这里插入图片描述

三、编写Verilog源程序

或门模块 my_or2.v

// 或门模块
module my_or2(a, b, c); // 模块描述开始
    input a, b;         // 模块输入端口说明
    output c;           // 模块输出端口说明
    // 数据流方式描述模块功能
    assign c = a | b;   // 连续赋值语句描述模块功能
endmodule               // 模块描述结束

半加器模块 h_adder.v

// 半加器模块
module h_adder(a, b, so, co);    // 模块描述开始
    input a, b;                 // 模块输入端口说明
    output so, co;              // 模块输出端口说明
    // 数据流方式描述模块功能
    assign so = (a | b) && (!(a && b)); // 连续赋值语句描述模块功能
    assign co = !(!(a && b));           // 连续赋值语句描述模块功能
endmodule               // 模块描述结束

全加器模块 f_adder.v

// 全加器模块
module f_adder(ain, bin, cin, sum, cout);    // 模块描述开始
    input ain, bin, cin;                    // 模块输入端口说明
    output sum, cout;                       // 模块输出端口说明
    wire s1, s2, s3;                        // 数据类型说明
    // 使用元件实例化语句描述系统的组成结构
    h_adder u1(.a(ain),.b(bin),.so(s2),.co(s1));    // 名字关联元件实例化
    h_adder u2(.a(s2),.b(cin),.so(sum),.co(s3));    // 名字关联元件实例化
    my_or2 u3(.a(s1),.b(s3),.c(cout));             // 名字关联元件实例化
endmodule               // 模块描述结束

四、仿真

在左边流程窗口点击Add Sources,再选择Add or create simulation sources
在这里插入图片描述
在Simulation Sources里面添加一个tb_top.v文件,并编写testbench的内容。

`timescale 1ns / 1ps
module tb_top();
    reg ain, bin, cin;
    wire sum, cout;
    
    initial
    begin
        ain = 0;
        bin = 0;
        cin = 0;
    end
    
    always
        #10 ain = !ain;
        
    always
        #20 bin = !bin;
        
    always
        #40 cin = !cin;
        
    f_adder uut (.ain(ain), .bin(bin), .cin(cin), .sum(sum), .cout(cout));
    
endmodule

在左边流程窗口中展开SIMULATION,点击Run Simulation,选择Run Behavioral Simulation运行。
在这里插入图片描述
弹出仿真结果窗口,全加器的sum和cout的逻辑符合预期。
在这里插入图片描述

五、查看RTL分析

在左边流程窗口中展开RTL ANALYSIS,选择Schmatic,点击运行。
在这里插入图片描述
打开RTL视图后,可以看出,Verilog等硬件描述语言描述的是一套硬件电路。如果电路系统正常工作的话,电路中各个部分应该是同时工作,也即电路系统的各部分工作是并行的。(经过一定的设计,也可以设计成按顺序工作的)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值