verilog之原语设计

1、原语作用

在一般的verilog设计中,一般采用数字逻辑设计,由软件将数字逻辑转化为特定的数字电路。但是,对于某些特殊的领域,有可能需要用户直接自定义数字电路以达到对指定电路的设计。原语就是执行这个功能的。原语也就是门级语言。这个语言之于verilog就像汇编语言之于C语言一样,是门级网表所采用的语法。了解这个语言的语法,可以提高对编译器工作的认识。如果具有足够的经验,甚至可以直接修改门级网表来实现设计的实现。对于一个大型的工程而言,这无疑会节约大量的时间。

2、基本语法

简单的与或非门:

and a1(out1,in1,in2); //简单的与门a1,先输出,再输入
not n1(out1,in1); //简单的非门
or or1(out1,in1,in2); //简单或门
xor xor1(out1,in1,in2);//简单异或门
nand nand1(out1,in1,in2);//与非门
nor nor(out1,in1,in2);//与或门
xnor xnor1(out1,in1,in2);//简单同或门
buf b1(out1,out2,in); //二输出缓存门,除了z会被当作x输出,其他输出和输入一样
bufif1 bf1(outw,inw,controlw);//三态门,控制位为0,输出为z,控制位为1,输出等于输入,一般不将控制位置于高阻;fi1就是控制位为1输出。
//同理可以推出bufif0是control为0时输出有效。其他的三态门如notif0和notif1就是在buf三态上加上not逻辑,即输出为输入的非。

阵列输入的与或非门:

nand #2 nand_array[3:0] (out,in1,in2);//这里的out,in1,in2都是和[3:0]的位宽对齐的。就相当于声明了一排与门。可以理解为总线与非门
bufif0 ar[3:0] (out,in,en);//注意,这里的控制端口en是一个位宽,也就是声明由一个控制口控制的阵列三态门。
//还有一些复杂的阵列操作,如合并,添加等,这里就不多说明。

在FPGA常用的门级组合逻辑语言就这几个。还有一些基于器件的描述和传输门的描述以后有时间再看,现在先接触简单逻辑。

延时控制:

#(95:100:105) clk=1;//这个#的延时是95到105之间,经典值为100,用于表示时钟的偏斜
and #(10) a1(out,in1,in2);//输入输出总延时
and #(10,12) a2(out,in1,in2);//上升延时和下降延时,区分了上升和下降的区别
bufif1 #(10,12,11) a3(out,in1,en);//上升延时,下降延时和关断延时,关断延时,就是en作用的时间

这里也是几个简单的延时模型,还有许多其他的语法,这里就不多介绍。

3、简单总结

想要掌握原语设计还是比较困难的,但是阅读应该是必要的。通过阅读自己写的verilog代码所对应的原语,可以快速理解自己代码所对应的电路。通过对数字电路的理解,可以提高设计的认识,进而理解verilog的设计方法。而且,对于学习过数字电路设计的人来说,将简单的数字电路转化为原语也是一个不错的挑战。

verilog之原语设计的更多相关文章

  1. Verilog学习笔记设计和验证篇(五)...............层次化事件队列

    详细的了解层次化事件队列有助于理解Verilog的阻塞赋值和非阻塞赋值功能.所谓层次化事件队列指的是用于调度仿真时间的不同Verilog事件队列.在IEEE的5.3节中定义了层次化事件队列在逻辑上分为 ...

  2. Verilog学习笔记设计和验证篇(三)...............同步有限状态机的指导原则

    因为大多数的FPGA内部的触发器数目相当多,又加上独热码状态机(one hot code machine)的译码逻辑最为简单,所以在FPGA实现状态机时,往往采用独热码状态机(即每个状态只有一个寄存器 ...

  3. ACE框架 同步原语设计

    ACE框架常用的同步机制设计成统一的原语接口.同步原语使用系统平台(操作系统,多线程库)提供的同步原语,并为系统平台不提供的同步原语提供模拟实现.ACE框架使用了外观模式和适配器分两层,将同步原语统一 ...

  4. verilog分频模块设计

    verilog设计: 分频器的设计: 分频器就是将一个时钟源的频率降低的过程(可以通过观察分频之后周期中包含几个原时钟周期来看是几分频),分频分为基数分频也分为偶数分频, 偶数分频的代码如下:(其中就 ...

  5. 8421BCD转余3码Verilog HDL的设计(1)

    近期阅读Verilog HDL高级数字设计(第二版)中,遇到了串行比特流BCD码转余3码转换器的设计,比较独特的是: (1)该转换器的输入为1位串行比特流,输出也为1位串行比特流. BCD码与余三码的 ...

  6. Verilog学习笔记设计和验证篇(一)...............总线和流水线

    总线 总线是运算部件之间数据流通的公共通道.在硬线逻辑构成的运算电路中只要电路的规模允许可以比较自由的确定总线的位宽,从而大大的提高数据流通的速度.各个运算部件和数据寄存器组可以通过带有控制端的三态门 ...

  7. Verilog学习笔记设计和验证篇(二)...............同步有限状态机

    上图表示的就是数字电路设计中常用的时钟同步状态机的结构.其中共有四个部分产生下一状态的组合逻辑F.状态寄存器组.输出组合逻辑G.流水线输出寄存器组.如果状态寄存器组由n个寄存器组成,就可以记忆2^n个 ...

  8. Verilog分频器的设计

    大三都要结束了,才发现自己太多东西没深入学习. 对于偶分频:(计数到分频数的一半就翻转) 注: 图中只用了一个计数器,当然也可以用多个: 图中只计数到需要分频的一半,当然也可计数到更多: 图中从第一个 ...

  9. 基于verilog的分频器设计(半整数分频,小数分频:下)

    第二种方法:对进行奇数倍n分频时钟,首先进行n/2分频(带小数,即等于(n-1)/2+0.5),然后再进行二分频得到.得到占空比为50%的奇数倍分频.下面讲讲进行小数分频的设计方法. 小数分频:首先讲 ...

  10. 基于verilog的分频器设计(奇偶分频原理及其电路实现:上)

    在一个数字系统中往往需要多种频率的时钟脉冲作为驱动源,这样就需要对FPGA的系统时钟(频率太高)进行分频.分频器主要分为奇数分频,偶数分频,半整数分频和小数分频,在对时钟要求不是很严格的FPGA系统中 ...

随机推荐

  1. 深入 Nginx 之架构篇[转]

    前言 最近在读 Nginx 相关的书籍,做一下读书笔记. Nginx 作为业界知名的高性能服务器,被广泛的应用.它的高性能正是由于其优秀的架构设计,其架构主要包括这几点:模块化设计.事件驱动架构.请求 ...

  2. 用于解析FBNeo游戏数据的Python3脚本

    FBNeo在代码中存储了游戏的元数据, 其数据格式为 struct BurnDriver BurnDrvCpsStriderua = { "striderua", "st ...

  3. SpringBoot使用git-commit-id-maven-plugin打包

    简介 git-commit-id-maven-plugin 是一个maven 插件,用来在打包的时候将git-commit 信息打进jar中. 这样做的好处是可以将发布的某版本和对应的代码关联起来,方 ...

  4. 非常好用的VS Code插件

    Auto-Collapse Explorer 如果希望在VS Code编辑器中打开文件的时候自动展开对应的目录结构,需要开启"Auto Reveal". 具体设置步骤: 1.打开设 ...

  5. go控制grpc的metadata

    grpc让我们可以像本地调用一样实现远程调用,对于每一次的RPC调用中,都可能会有一些有用的数据,而这些数据就可以通过 metadata来传递.metadata是以key-value的形式存储数据的, ...

  6. linux7/8版本的docker-ce安装(2022/5/27亲测可行)

    centos7 # 先配阿里源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup curl - ...

  7. 【C# .Net】List循环add,出现数据相同现象? 引发对引用类型和值类型的底层逻辑的思考。

    赶项目时发现了一个问题,定义一个引用对象,如果在循环外定义对象,在循环内list.add(object).最后的结果却是所有的对象值都是一样的,即每add一次,都会把之前的数据覆盖. 解决方法:把对象 ...

  8. 【Azure API 管理】API Management 访问限制策略[quota-by-key] 中参数 [renewal-period] 的实验和理解

    quota-by-key 策略允许根据密钥强制实施可续订或有生存期的调用量和/或带宽配额. 密钥的值可以是任意字符串,通常使用策略表达式来提供密钥. 可以添加可选增量条件,指定应在配额范围内的请求. ...

  9. book 电子书转换 在线工具

    https://convertio.co/download/911d3a3f39db0b2e39ed6e3c8acb31f6be786a/ Convertio

  10. C++ //常用拷贝和替换算法 //copy //replace 将指定区间范围内的旧元素修改为新元素 //replace_if(满足条件的元素,替换指定的元素) //swap 互换两个容器的元素

    //常用拷贝和替换算法 //copy //replace 将指定区间范围内的旧元素修改为新元素 //replace_if(满足条件的元素,替换指定的元素) //swap 互换两个容器的元素 #incl ...