本文节选自《从算法设计到硬件逻辑的实现》,仅供学习交流使用。


加法器

用 Verilog HDL 来描述加法器是相当容易的,只需要把运算表达式写出就可以了,见下例。

module add_4( X, Y, sum, C);
input [3 : 0] X, Y;
output [3: 0] sum;
output C;
assign {C, Sum } = X + Y;
endmodule

而 16 位加法器只需要扩大位数即可,见下例:

module add_16( X, Y, sum, C);input [15 : 0] X, Y;
output [15 : 0] sum;
output C;assign {C, Sum } = X + Y;endmodule

这样设计的加法器在行为仿真时是没有延时的。借助综合器,可以根据以上 Verilog HDL源代码自动将其综合成典型的加法器电路结构。综合器有许多选项可供设计者选择,以便用来控制自动生成电路的性能。设计者可以考虑提高电路的速度,也可以考虑节省电路元件以减少电路占用硅片的面积。综合器会自动根据选项为你挑选一种基本加法器的结构。

有的高性能综合器还可以根据用户对运算速度的要求插入流水线结构,来提高运算器的性能。可见在综合工具的资源库中存有许多种基本的电路结构,通过编译系统的分析,自动为设计者选择一种电路结构,随着综合器的日益成熟它的功能将越来越强。然后设计者还需通过布局布线工具生成具有布线延迟的电路,再进行后仿真,便可知道该加法器的实际延时。根据实际的延迟便可以确定使用该运算逻辑的最高频率。若需要重复使用该运算器,则需要在控制数据流动的状态机中为其安排必要的时序。


乘法器

用 Verilog HDL 来描述乘法器是相当容易的,只需要把运算表达式写出就可以了,见下例。

module mult_4( X, Y, Product);input [3 : 0] X, Y;
output [7 : 0] Product;assign Product = X * Y;endmodule

而 8 位乘法器只需要扩大位数即可,见下例:

module mult_8( X, Y, Product);
input [7 : 0] X, Y;
output [15 : 0] Product;assign Product = X * Y;endmodule

这样设计的乘法器在行为仿真时是没有延时的。借助综合器,可以根据以上 VerilogHDL 源代码自动将其综合成典型的乘法器电路结构。综合器有许多选项可供设计者选择,以便用来控制自动生成电路的性能。设计者可以考虑提高速度,也可以考虑节省电路元件以减少电路占用硅片的面积。综合器会自动根据选项和约束文件为你挑选一种基本乘法器的结构。有的高性能综合器还可以根据用户对运算速度的要求插入流水线结构,来提高运算器的性能。随着综合工具的发展,其资源库中将存有越来越多种类的基本电路结构,通过编译系统的分析,自动为设计者选择一种更符合设计者要求的电路结构。然后设计者通过布局布线工具生成具有布线延迟的电路,再进行后仿真,便可精确地知道该乘法器的实际延时。根据实际的延迟便可以确定使用该运算逻辑的最高频率。若需要重复使用该运算器,便可以根据此数据在控制数据流动的状态机中为其安排必要的时序。所以借助于硬件描述语言和综合工具大大加快了计算逻辑电路设计的过程。


比较器

用 Verilog HDL 来设计 比较电路是很容易的。下面就是一个位数可以由用户定义的比较电路模块:

module compare_n ( X, Y, XGY, XSY, XEY);
input [width-1:0] X, Y;
output XGY, XSY, XEY;
reg XGY, XSY, XEY;
parameter width = 8;
always @ ( X or Y ) // 每当 X 或 Y 变化时
beginif ( X = = Y )XEY = 1; // 设置 X 等于 Y的信号为 1else XEY = 0;if (X > Y)XGY = 1; // 设置 X 大于 Y的信号为 1else XGY = 0;if (X < Y)XSY = 1; // 设置 X 小于 Y的信号为 1else XSY = 0;
end
endmodule

综合工具能自动把以上原代码综合成一个八位比较器。如果在实例引用时分别改变参数width 值为 16 和 32 综合工具就能自动把以上原代码分别综合成 16 位和 32 位的比较器。


多路器

用 Verilog HDL 来设计多路选择器电路是很容易的。下面就是带使能控制信号的数据位宽可以由用户定义的八路数据选择器模块:

module Mux_8( addr,in1, in2, in3, in4, in5, in6, in7, in8, Mout, nCS);input [2:0] addr;
input [width-1] in1, in2, in3, in4, in5, in6, in7, in8;
output [width-1] Mout;
parameter width = 8;always @ (addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8)
beginif (!ncs)case(addr)3’b000: Mout = in1;3’b001: Mout = in2;3’b010: Mout = in3;3’b011: Mout = in4;3’b100: Mout = in5;3’b101: Mout = in6;3’b110: Mout = in7;3’b111: Mout = in8;endcaseelseMout = 0;
endendmodule

综合工具能自动把以上原代码综合成一个数据位宽为 8 的八路选一数据多路器。如果在实例引用时分别改变参数 width 值为 16 和 32,综合工具就能自动把以上原代码分别综合成数据宽度为 16 位和 32 位的八选一数据多路器。


还有总线和流水线,等到以后的博文再说。

【 Verilog HDL 】基本运算逻辑的Verilog HDL 模型相关推荐

  1. (05)Verilog HDL时序逻辑:always

    (05)Verilog HDL时序逻辑:always 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL时序逻辑:always 5)结语 1.2 FP ...

  2. (61)Verilog HDL模块例化Verilog模块

    (61)Verilog HDL模块例化Verilog模块 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL模块例化Verilog模块 5)结语 1. ...

  3. Verilog数字系统教程学习——Verilog语法的基本概念

    Verilog HDL是一种用于数字系统设计的语言.Verilog HDL既是一种行为描述语言也是一种结构描述语言. 行为描述--逻辑--reg型变量 结构描述--连线--wire型变量 这就是说,无 ...

  4. ASIC-WORLD Verilog(1)一日Verilog

    写在前面 在自己准备写一些简单的verilog教程之前,参考了许多资料----asic-world网站的这套verilog教程即是其一.这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的 ...

  5. python逻辑回归模型建模步骤_Python逻辑回归——建模-评估模型

    学完线性回归,逻辑回归建模+评估模型的过程就相对好理解很多.其实就是换汤不换药. 逻辑回归不是回归算法,而是分类算法,准确来说,叫逻辑分类 逻辑分类本质上是二分分类,即分类结果标签只有两个 逻辑回归建 ...

  6. linux gmac10下载,ethmac10g verilog代码 10G eth mac verilog代码参考下载 - 下载 - 搜珍网...

    压缩包 : ethmac10g_latest.tar.gz 列表 ethmac10g/ ethmac10g/tags/ ethmac10g/tags/V10/ ethmac10g/tags/V10/M ...

  7. 数据挖掘-二项逻辑斯蒂回归模型算法的R实现

    本次为学生时期所写的实验报告,代码程序为课堂学习和自学,对网络程序有所参考,如有雷同,望指出出处,谢谢! 基础知识来自教材:李航的<统计学习方法> 本人小白,仍在不断学习中,有错误的地方恳 ...

  8. 逻辑斯蒂分布模型、二项逻辑斯蒂回归模型、多项逻辑斯蒂回归模型

    一.逻辑斯蒂分布/回归模型 模型描述的是一种什么样的事件或现象: 设X是连续随机变量,X服从逻辑斯蒂回归分布是指X具有下列分布函数和密度函数: 附上逻辑斯蒂分布的密度函数与分布函数,如下: 物理含义, ...

  9. 理解逻辑斯蒂回归模型

    逻辑斯蒂回归是一个非常经典的二项分类模型,也可以扩展为多项分类模型.其在应用于分类时的过程一般如下,对于给定的数据集,首先根据训练样本点学习到参数w,b;再对预测点分别计算两类的条件概率,将预测点判为 ...

最新文章

  1. visual studio 2010 professional , premium, ultimate各版本功能对比
  2. spock_将Spock 1.3测试迁移到Spock 2.0
  3. nginx服务器access_log日志分析及配置详解
  4. 矩阵二范数(norm)
  5. PMcaff活动 | 汪培公:农村电商模式的重新思考
  6. 暗时间(一)设计你自己的进度条
  7. 十八、梯度下降与反向传播
  8. JDK文档中关于Semaphore的正确使用以及使用场景
  9. Spring常用的的注解对应xml配置详解
  10. oracle的主目录怎么删除,删除oracle数据库卸载
  11. Python_包和模块的简单应用
  12. 第五章:1.数组和广义表 -- 数组
  13. React Native创建项目等待时间长解决
  14. 指定的網域的名稱或安全性識別碼(用磁碟映像檔部署的電腦無法加入AD網域 )...
  15. matlab ldiv,MATLAB入门教程精选
  16. SCDN如何有效防御CC攻击和DDOS攻击的
  17. rancher 启动命令_Rancher 快速上手指南操作(1)
  18. Drools——什么是规则
  19. Eureka自我保护机制、健康检查的作用
  20. 聚观早报|中国将是ChatGPT主要对手;​iPhone 15将使用USB-C接口

热门文章

  1. Struts学习(五):对POJO对象访问的支持
  2. 认识计算机系统反思,《认识计算机系统》教学反思
  3. python中3or5什么意思_示例详解Python3 or Python2 两者之间的差异
  4. mysql 字段可以存数组吗_mysql怎么存数组
  5. html select 多选取值,下拉框多选实现 jquery-multiselect 并获取选中的值
  6. java中String xx xx_Java 9 紧凑String改进[JEP 254]Java9新特性
  7. python区间分组_分组匹配
  8. Java基础看jvm,JAVA基础知识|java虚拟机(JVM)
  9. 2020人工神经网络第一次作业-参考答案第六部分
  10. 逐飞科技对于STC8H1K系列的单片机正交解码的资料以及实验