二、6【FPGA】简单的组合逻辑——设计半加器

前言

学习说明此文档为本人的学习笔记

学习视频:是根据野火FPGA视频教程——第六讲
https://www.bilibili.com/video/BV1nQ4y1Z7zN?p=3

学习资料:《数字电子技术基础》清华大学出版社

理论学习

相关数字电路基础理论学习请参考本人的另一个笔记,可以让你深刻理解相关知识。

《数字电子技术基础》4.3 若干常用的组合逻辑电路 学习笔记_FPGA-桥的博客-CSDN博客《数字电子技术基础》常用的组合逻辑电路编码器和译码器、数据选择器和数据分配器、加法器、数值比较器、奇偶发生/校验器https://blog.csdn.net/ARM_qiao/article/details/124052097

实战演练 

一、设计规划

1.1 实验(项目)目标

设计实现一个半加器,关于其理论知识请参考本上的另一篇博文,链接在上面已经给出。

1.2 硬件资源

 讲KYE1、KYE2分别作为in1、in2信号输入;以LED灯D9作为输出sum,LED灯D10作为进位的输出count。按键按下后为低电平,LED灯点亮时为高电平。

二、程序设计

2.1 模块框图 

2.2 端口信号及其真值表 

输入输出信号描述
信号位宽类型功能描述板载引脚板载功能
in11bitinput加数1V17按键KEY1
in21bitinput加数2W17按键KEY2
sum1bitoutput求和结果M21LED灯D9
cout1bitoutput求和进位L21LED灯D10
半加器真值表
输入输出
in1in2sumcout
0000
0110
1010
1101

2.3 波形图绘制

2.4 代码编写

`timescale 1ns / 1ps
//
// Company: 追逐者——桥的小作坊
// Engineer: 
// 
// Create Date: 2022/04/19 09:52:05
// Design Name: 
// Module Name: half_add
// Project Name: 
// Target Devices: 
// Tool Versions: Vivado 2018_3
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:学习代码
// 
//


module half_add(
    output wire sum,
    output wire cout,
    
    input  wire in1,
    input  wire in2
    );
    
    assign {cout, sum} = in1 + in2;
endmodule

 RTL代码对应的原理视图。 

 三、逻辑仿真

3.1 仿真文件的编写

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/04/19 09:58:01
// Design Name: 
// Module Name: tb_half_add
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module tb_half_add();
    reg in1;
    reg in2;
    
    wire sum;
    wire cout;
    
    initial begin 
        in1 = 1'b0;
        in2 = 1'b0;
    end 
    
    always #10 in1 <= {$random} % 2;
    always #10 in2 <= {$random} % 2;
    
    initial begin  
        $timeformat(-12, 0, "ps", 6);
        $monitor ("@time %t:in1=%b, in2=%b, sum=%b, cout=%b", $time, in1, in2, sum, cout);
    end 
    
    //实例化
    half_add half_add_ins(
        .in1(in1),
        .in2(in2),
        .sum(sum),
        .cout(cout)
        );

endmodule

注:在编写代码时,实例化后的“ ) ”,写成了“ } ”,因此提示错误  

3.2 仿真波形图对比

 四、上板验证

4.1 管脚绑定

管脚绑定的约束文件的代码:

#按键管脚分配约束
set_property PACKAGE_PIN V17 [get_prots in1]
set_property IOSTANDARD LVCMOS33 [get_prots in1]
set_property PACKAGE_PIN w17 [get_prots in2]
set_property IOSTANDARD LVCMOS33 [get_prots in2]

#led灯管脚分配约束
set_property PACKAGE_PIN M21 [get_prots sum]
set_property IOSTANDARD LVCMOS33 [get_prots sum]
set_property PACKAGE_PIN L21 [get_prots cout]
set_property IOSTANDARD LVCMOS33 [get_prots cout]

注 :本人在编写代码时将get_ports写错了,写成了get_prots,随意提示错误。

4.2 程序固化及下载

设置生成固化文件,具体的之前的博客已经有对其进行说明。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

追逐者-桥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值