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. golang生成一个dll供rundll32.exe调用

    背景: 项目用例需要覆盖场景:window rundll32.exe 调用dll并写一段内容到磁盘, 开始使用msf生成,会被安全软件拦截,索性用go 写一个 代码如下: package main i ...

  2. TerminateJobObject是使用

    注意: AssignProcessToJobObject仅适用于win32 desktop app, 比如notepad是适用的,calculator是不适用的 下面的demo是将notepad的句柄 ...

  3. CentOS8安装Docker报错问题解决

    问题描述 CentOS版本:8.5.2111. # cat /etc/redhat-release CentOS Linux release 8.5.2111 安装准备: # 安装所需软件包 sudo ...

  4. ASP.NET Core MVC应用模型的构建[1]: 应用的蓝图

    我个人觉得这是ASP.NET Core MVC框架体系最核心的部分.原因很简单,MVC框架建立在ASP.NET Core路由终结点上,它最终的目的就是将每个Action方法映射为一个或者多个路由终结点 ...

  5. 【Azure App Service】如何来停止 App Service 的高级工具站点 Kudu ?

    问题描述 如何来停止 App Service 的高级工具站点 Kudu ? kudu 介绍 Kudu 提供了一组面向开发人员的工具和扩展点,用于您的应用服务应用程序. Kudu (Advanced T ...

  6. 【Azure 云服务】Azure Cloud Service中的错误事件 Error Event(Defrag/Perflib) 解答

    问题描述 在Azure Cloud Service的实例中,收集到各种 Error Event 内容,本文针对所收集的三种Event进行解析. 1: This operation is not sup ...

  7. 【Azure 应用服务】VS2019发布应用到正在运行的App Service时失败问题的解决

    问题描述 在VS 2019中配置号App Service的Publish Profile后,发布应用出现错误.根据VS 2019中的输出消息可知有文件正在运行中,无法被替换,所以发布失败. 问题解决 ...

  8. JVM内存模式

    Java内存模型即Java Memory Model,简称JMM. JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式.JVM 是整个计算机虚拟模型,所以 JMM 是隶属于 JV ...

  9. [C++] epoll编写的echo服务端

    直接贴代码,代码是运行在Linux上面的,通过 g++ epoll.cpp编译 #include <sys/socket.h> #include <sys/epoll.h> # ...

  10. 没想到,JDBC 驱动会偷偷修改 sql_mode 的会话值

    最近碰到一个 case,值得分享一下. 现象就是一个 update 操作,在 mysql 客户端中执行提示 warning,但在 java 程序中执行却又报错. 问题重现 mysql> crea ...