数据通路。

y = func(a,b)

func可以是加法,减法,乘法,比较,移位,舍入,饱和等。

分别针对有符号数,无符号数的情况。

提示:可以参考synopsys的一篇文档 https://t.zsxq.com/QF6QNju


加法:

  • 对于无符号数而言:
module arithmetic(input [3:0] a,input [3:0] b,output [4:0] res_sum, //加output [3:0] res_sub, //减output [7:0] res_pro, //乘//output [3:0] res_comp, //比较output [3:0] right_shift //右移);assign res_sum = a + b;assign res_sub = a - b;assign res_pro = a * b; //assign res_com = assign right_shift = a>>3; //逻辑右移wire [3:0] right_shift_a; //算术右移结果assign right_shift_a = a>>>3; endmodule

测试文件:

module arithmetic_tb(
);reg clk;reg [3:0] a;reg [3:0] b;wire [4:0] res_sum; //加wire [3:0] res_sub; //减wire [7:0] res_pro; //乘//wire [3:0] res_comp, //比较wire [3:0] right_shift; //右移initial beginclk = 0;forever # 2 clk = ~clk;endinitial begina = 4'b1011;b = 4'b1001;#10a = 4'b1001;b = 4'b0111;endarithmetic u0(.a(a),.b(b),.res_sum(res_sum),.res_sub(res_sub),.res_pro(res_pro),.right_shift(right_shift));endmodule

行为仿真时序图:

对于无符号数,逻辑右移和算术右移是一样的,都是高位补零。

  • 对于有符号数而言:
module arithmetic(input signed [3:0] a,input signed [3:0] b,output signed [4:0] res_sum, //加output signed [3:0] res_sub, //减output signed [7:0] res_pro, //乘output signed [3:0] right_shift //右移);assign res_sum = a + b;assign res_sub = a - b;assign res_pro = a * b; //assign res_com = assign right_shift = a>>3; //逻辑右移wire [3:0] right_shift_a; //算术右移结果assign right_shift_a = a>>>3; endmodule

测试文件同上!

仿真波形:

可以看出,对于有符号数,逻辑右移和算术右移结果不一样,逻辑右移依然是补零,算术右移则补符号位。

但对于有符号数的加法规则如何?

例如上述仿真:1001 + 0111 为什么等于 00000?

也就是-1 + 7 = 0?

得到了答案:

1001是补码的形式,原码是1111,也就是-7,这样的话就是-7+7=0,也符合道理了。

【Verilog HDL 训练】第 12 天(数据通路)相关推荐

  1. 【Verilog HDL 训练】第 11 天(分频电路)

    设计一个占空比50%的三分频电路. 针对这个分频器,博文的末尾会给出一个反面教材,这是我上次写的一个分频器,看起来很好,其实是不能综合的.针对其中的错误,我令立博文记录之:[ Verilog ]alw ...

  2. 【Verilog HDL 训练】第 06 天(边沿检测)

    1. 复习verilog语法 [选做题] - reg和wire的区别 寄存器数据类型 Verilog中规定,凡是在程序块中被赋值的变量,都必须是寄存器类型的.(程序块:例如always块) 这里未免还 ...

  3. 【Verilog HDL 训练】第 04 天(竞争、冒险、译码等)

    1. 什么是竞争和冒险? 记得我刚学FPGA那会,恶补基础知识,其中之一就是竞争与冒险,我参考了<FPGA之道>,记录了几篇博客: [ FPGA ]组合逻辑中的竞争与险象问题(一) 第一篇 ...

  4. 【Verilog HDL 训练】第 14 天(glitch-free的两个时钟切换电路)

    2019年5月13日 glitch-free的两个时钟切换电路. 可以看到这是一个星期之前的题目了,现在才抽空做,把这篇颠倒个顺序吧,也是最后一天了,以后的题目都是讨论性质的,不会以第多少天的形式来写 ...

  5. 【Verilog HDL 训练】第 13 天(存储器、SRAM)

    存储器. 1. rom,ram,flash,ddr,sram,dram,mram..列举并解释一下这些名词. 2. 用verilog实现一个深度为16,位宽8bit的单端口SRAM.搭建一个仿真环境, ...

  6. 【Verilog HDL 训练】第 10 天(PWM 呼吸灯)

    5月8日 PWM 用verilog实现PWM控制呼吸灯.呼吸周期2秒:1秒逐渐变亮,1秒逐渐变暗.系统时钟24MHz,pwm周期1ms,精度1us. 今天的题目我是第一次见,答案借鉴大神的:Veril ...

  7. 【Verilog HDL 训练】第 09 天(按键消抖)

    5月7日 按键防抖 1. 用verilog实现按键抖动消除电路,抖动小于15ms,输入时钟12MHz. 在编写Verilog代码之前,先分析下一些前提问题,首先是几个按键(1个,多个),我们以1个和三 ...

  8. 【Verilog HDL 训练】第 08 天(二进制、Johnson、环形计数器)

    5月6日 计数器 1. 用verilog实现一个4bit二进制计数器. a) 异步复位 b) 同步复位 input clk, rst_n; output [3:0] o_cnt; Verilog实现代 ...

  9. 【Verilog HDL 训练】第 07 天(串并转换)

    串并转换 1. 复习verilog语法 [选做题] - 文件操作fopen fdisplay fwrite fclose - 生成随机数 random - 初始化 readmemh readmemb ...

最新文章

  1. 利用Redis进行全页面缓存的简单Demo
  2. ORA-01092: ORACLE 例程终止 强行断开连接
  3. 为Openshift + MongoDb应用程序编写验收测试
  4. java人种_实在看不出藏族有大量矮黑血统
  5. 应用程序、虚拟目录、应用程序池
  6. iOS开发之oc(五)--成员变量(实例变量)
  7. matlab 三维点 边界曲面,不用matlab如何从散点数据绘制极坐标三维曲面图?
  8. 关于CSplitterWnd类窗口静态分割总结
  9. mac iterm 怎么搜索不能输入_Mac高效开发之iTerm2、Prezto和Solarized主题
  10. Physical Standby Database Failover
  11. 前后端分离项目,标准json协议格式参考
  12. 关于win7系统重装完鼠标不能用的解决办法
  13. php抓取微信文章图片保存到本地
  14. Unity 多点触控 禁用与启用
  15. 机器学习及SparkMLlib简介
  16. Git原理杂谈之pull/push命令
  17. 什么是内存对齐?如何计算内存对齐?为什么要内存对齐?
  18. 迅捷fw150服务器无响应,Fast迅捷FW150RM无线路由器Client客户端模式怎么设置
  19. RabbitMQ流量削峰应用
  20. javascript获取手机键盘的高度

热门文章

  1. Sean Lynch谈Facebook Claspin监控工具的由来
  2. 难道前途真的比钱重要吗
  3. C#让程序只运行一次实例
  4. java poi 读取xlsx文件_使用POI读取xlsx文件(SXSSFWorkbook)
  5. php开发的程序怎么用加密狗加密,C# 简单的程序绑定、加密(类似加密狗)
  6. SpringCloud_项目搭建以及Eureka
  7. 自己珍藏一些有趣的Python子程序
  8. 2021年春季学期-信号与系统-第十三次作业参考答案-第七小题
  9. 将多个图片转换成PDF文件-img2pdf
  10. 根据声音信号测量距离