FPGA初级篇②——算术计算仿真,加减乘除,例化使用

本文介绍了如何在Vivado环境中进行FPGA设计,通过创建设计文件和仿真文件实现加减乘除运算。首先,添加了`add.v`文件实现加法运算,接着创建仿真文件`sim_add.v`并进行初始化设置及模块例化。然后,展示了如何修改加法模块来实现减法,并在`sim_add.v`中添加减法和乘法的例化代码。最后,仿真运行得到预期的运算结果。该教程对于学习FPGA设计和验证具有实践指导意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、添加设计文件

二、添加仿真文件

三、加减乘除的其他代码

四、仿真+仿真结果


一、添加设计文件

点击“+”号,选择新建设计文件add

在这可以看到add.v文件,双击打开,输入add运算

add.v程序具体:

`timescale 1ns / 1ps

module add(
        input[3:0] add_A,
        input[3:0] add_B,
        input[4:0] add_C
    );
    assign add_C=add_A+add_B;
endmodule

二、添加仿真文件

同样“+”号,选择新建仿真文件,命名为sim_add

 

在source—simulation source可以找到sim_add.v,双击打开输入初始化代码和例化。

 

具体代码:

`timescale 1ns / 1ps

module sim_add;
reg [3:0] A1;
reg [3:0] B1;
wire [4:0] C1;//C1是例化输出,不是always产生,所以定义为wire型
//加法
initial
begin
A1=4'd5;
B1=4'd10;
end
//例化前面是要连接的模块名,后面是例化名
add my_add(
    .add_A(A1),
    .add_B(B1),
    .add_C(C1));

endmodule

注意例化前面是模块名,后面是例化名。对应引脚框外是模块引脚,款内是例化引脚。

三、加减乘除的其他代码

只需要新建设计文件,将加法的代码稍作修改,再到sim_add中添加代码就可以了。

以减法为例:

新建设计文件sub.v,具体代码:

`timescale 1ns / 1ps

module sub(
        input[3:0] sub_A,
        input[3:0] sub_B,
        input[4:0] sub_C
    );
    assign sub_C=sub_A-sub_B;
endmodule

补充完整的sim_add文件具体代码如下:

`timescale 1ns / 1ps


module sim_add;
reg [3:0] A1,A2;
reg [3:0] B1,B2;
wire [4:0] C1,C2;//C1是例化输出,不是always产生,所以定义为wire型
//加法
initial
begin
A1=4'd5;
B1=4'd10;
end
//例化前面是要连接的模块名,后面是例化名
add my_add(
    .add_A(A1),
    .add_B(B1),
    .add_C(C1));

//减法
initial
begin
A2=4'd10;
B2=4'd5;
end
//例化前面是要连接的模块名,后面是例化名
sub my_sub(
    .sub_A(A2),
    .sub_B(B2),
    .sub_C(C2));
    
//乘法
initial
begin
A3=4'd2;
B3=4'd3;
end
//例化前面是要连接的模块名,后面是例化名
mul my_mul(
    .mul_A(A3),
    .mul_B(B3),
    .mul_C(C3));

endmodule
        

完整Vivado工程文件可以参考:Vivado—加减乘除算术运算仿真-C文档类资源-CSDN下载

四、仿真+仿真结果

 

### 计算机组成原理中加减乘除运算系统的调试方法 #### 1. 理解基本概念 计算机内部通过位运算来实现加法、减法、乘法和除法。这些运算是由硬件组件如算术逻辑单元(ALU)完成的,其中涉及多个层次的设计与测试[^1]。 对于加法而言,在进制数表示下,两个数值相加以获得结果的过程可以通过半加器或全加器电路模型。当涉及到多位数字时,则需串联多组这样的基础构建模块以处理每一位上的求和并传递进位信号至更高位。 至于减法操作,通常转换为补码形式下的加法来进行计算;即被减数加上另一个数的一补码再加上一作为最终差值的结果表达方式之一。 #### 2. 测试环境搭建 为了有效地对加减乘除运算系统进行调试,建议先建立一个稳定的仿真平台。可以利用FPGA开发板配合相应的软件工具链(比如Vivado HLS 或 Quartus Prime Lite Edition),或者是基于PC端运行的行为级模拟器(ModelSim, Icarus Verilog等)。这允许开发者编写RTL代码描述所需的功能,并对其进行编译综合及时序分析之前就能够在虚拟环境中验证其行为正确性[^3]。 #### 3. 编写测试向量 创建一系列全面覆盖各种边界条件以及典型应用场景的输入数据集作为测试案集合。如: - 对于加法器来说,应该考虑最大正整数之间相加溢出的情况; - 减法器则要注意负零(-0) 和 正常范围内的两数相差极大情形; - 乘法器方面除了常规乘积外还需特别关注因数中含有大量连续相同比特模式的情形; - 而对于除法器,非法分母(尝试做除以零错误),还有商的小数部分精度损失等问题都是不可忽视的重点检验对象。 ```verilog // 示:Verilog 中定义简单的加法器测试函数 module adder_test; reg [7:0] a,b; // 定义8位宽的操作数a和b wire [7:0] sum; // 存储加法结果 initial begin $monitor("At time %t : A=%d B=%d Sum=%d", $time,a,b,sum); // 初始变量 a=8'b0000_0000;b=8'b0000_0000; // 执行不同情况下的加法运算 @(posedge clk); {a,b}={8'd127,8'd1}; // 接近上界 @(posedge clk); {a,b}={8'd0,8'd0}; // 零值特 @(posedge clk); {a,b}={8'd64,-8'd64}; // 补码表示下的相反数 // 结束仿真 $finish; end endmodule ``` #### 4. 使用断言机制辅助查错 现代EDA工具支持在HDL源文件内嵌入属性声明语句用于实时监控设计状态变趋势,一旦违反预设规则就会触发警告甚至终止当前周期继续前进直到找到根本原因所在位置以便快速定位潜在缺陷所在之处。这种方法能够显著提高效率减少反复迭代次数加快项目进度安排表单推进速度提升产品质量等级标准达到预期目标要求水平之上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值