HDLbits day2 一位全加器逻辑表达式原理 FPGA关于仿真

问题1:一位全加器

assign sum = a ^ b ^ cin;
assign cout = a&b | a&cin | b&cin;

一位全加器,sum为输入加进位位异或(即1的个数为奇数时,sum==1);
cout为cout = a&b | a&cin | b&cin即三个输入至少两个是1时为1。
在这里插入图片描述

问题2:加/减法器

减法可以由加法得到,将一个加数取负(二进制形式取反加一)。
这里当输入sub为1时进行减法运算,当sub=0时进行加法运算。一方面,输入b与sub取异或,sub为1时,可以进行取反操作,sub为0时保持不变。另一方面,sub为1时,将其输入作为cin刚好可以完成减法运算中的加一操作,为0时,刚好可以满足加法运算。
在这里插入图片描述

module top_module(
    input [31:0] a,
    input [31:0] b,
    input sub,
    output [31:0] sum
);
    wire [31:0] in;
    wire cout,cout1;
    assign in=b^{32{sub}};
    add16 add16 ( .a(a[15:0]), .b(in[15:0]),  .cin(sub), .sum(sum[15:0]), .cout(cout) );
    add16 add161 ( .a(a[31:16]), .b(in[31:16]),  .cin(cout), .sum(sum[31:16]), .cout(cout1) );
endmodule

另外,将位数不一样的两个数进行按位门运算时,不要忘记把位数补足。
assign in=b^{32{sub}};

问题3

1.Procedures:always,initial,task,function
2.For synthesizing hardware, two types of always blocks are relevant:
Combinational: always @(*)
Clocked: always @(posedge clk)
这俩RTL(功能)(前)仿真和门级(后)仿真都一样。
在这里插入图片描述

关于仿真

FPGA的仿真可以划分为四类,即代码级仿真、门级仿真、映射后仿真以及布局布线后仿真。其中,代码级仿真,仿真的对象就是原始的、未经加工的HDL代码,这也就是我们通常所说的功能仿真;门级仿真,仿真对象是HDL代码经过综合后的门级 网表;而映射后仿真,仿真对象是门级网表经过转换后对应到FPGA上的具体逻辑资源聚类, 此时可以得到电路中的门延迟信息文件供仿真时使用;最后,布局布线后仿真,仿真对象是具 有位置信息和连线信息的FPGA上逻辑资源聚类,因此可以兼并考虑门延迟与线延迟信息, 这也就是我们通常所说的时序仿真。
vivado下就有好多种仿真。
在这里插入图片描述

问题4 &是按位与 and是门类型的关键字

nand #10 nd1(a,data,clock,clear);
这说明在模块中引用了一个名为nd1的与非门(nand),输入为data、clock和clear,输出为a,输出与输 入的延时为10个单位时间

问题5 关于tb文件中的initial和always的执行顺序

可以认为两者一起执行,并行执行。

问题6 关于always和always@(*)

两者区别是
verilog规定,always@()中的是指该always块内的所有输入信号的变化为敏感列表,也就是仿真时只有当always@()块内的输入信号产生变化,该块内描述的信号才会产生变化,而如果没有@,那就是不用满足特定条件才执行,而是执行完一次后立马执行下一次,一直重复执行。具体不做分析,反正tb不能用@()。
`timescale 1 ns/1 ps
module tb();
reg a,b,clk;
wire out_always_comb,out_always_ff ;
aa aa(
clk,
a,
b,
out_assign,
out_always_comb,
out_always_ff );

initial begin
a=0; b=0;clk=0;
#1000 $stop;
end
always #10 clk=~clk;
always begin
#10 a=~a;
end
always begin
#20 b=~b;
end
endmodule
前仿真
在这里插入图片描述
后仿真直接没法看了
在这里插入图片描述

问题7 后仿真(功能仿真)之前最好先Start EDA netlist writer一下

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值