![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
verilog
J1FengZ
心有猛虎,细嗅蔷薇。
展开
-
verilog | 十二、状态机
-分类根据状态机的输出是否与输入条件相关,可将状态机分为两大类:摩尔(Moore)型状态机和米勒(Mealy)型状态机。 -摩尔状态机:摩尔状态机的输出仅仅依赖于当前状态,而与输入条件无关。 -米勒型状态机:米勒型状态机的输出不仅依赖于当前状态,而且取决于该状态的输入条件。根据状态机的数量是否为有限个,可将状态机分为有限状态机(Finite State Machine,FSM)和无限状态机(Infinite State Machine,ISM)。逻辑设计中...原创 2020-07-19 10:25:18 · 1458 阅读 · 1 评论 -
verilog | 十一、m序列发生器
一、定义m序列:最长线性反馈移位寄存器序列的简称。是一种伪随机序列、伪噪声码。伪随机序列:不能预先确定但可以重复实现的序列。二、原理递推方程:特征方程:x^i仅指明其系数代表ci的值,x本身的取值并无实际意义。本原多项式:若反馈移位寄存器的特征多项式为本原多项式,则移位寄存器能产生m序列。若一个n次多项式f(x)满足:1)既约的:不能再因式分解;2)可整除(x^m + 1), m = 2^n - 1;3)除不尽(x^q + 1), q ..原创 2020-07-04 11:55:57 · 8336 阅读 · 4 评论 -
verilog | 十、时钟信号与复位信号
1.常规时钟1) initial:parameter clk_period = 10;reg clk;initial beginclk = 1'b0;forever#(clk_period / 2) clk = ~clk;end2) always:parameter clk_period = 10;reg clk;initialclk = 0;always #(clk_period / 2) clk = ~clk;2.占空比可调时钟..原创 2020-06-21 09:39:57 · 5607 阅读 · 0 评论 -
verilog | 九、UDP
-UDP:用户自定义原语(User-defined Primitive),自成体系,UDP中不能调用其他原语或模块。UDP有两种类型:1、表示组合逻辑的UDP:输出仅取决于输入信号的组合逻辑;2、表示时序逻辑的UDP:下一个输出值不但取决于当前的输入值,还取决于当前的内部状态。输出端口必须被声明为reg类型。电平敏感的状态表输入项,优先级高于边沿敏感的状态表输入项;-组成:关键字primitive-endprimitive。-定义规则:1、输入端口:关...原创 2020-06-20 22:54:53 · 1374 阅读 · 0 评论 -
verilog | 八、时序与延迟
-分布延迟:将延迟值赋给电路中独立的门,或是在单独的assign语句中指定延迟值。-集总延迟:将所有路径的积累延迟汇总于输出门处。-引脚到引脚的延迟:分别把延迟给模块中从每个输入到每个输出之间的所有路径。-路径延迟建模:在模块的源引脚(输入或输入输出)和目标引脚(输出或输入输出)之间的延迟称为模块路径延迟。-specify块:关键字specify-endspecify;包含:给穿过模块的所有路劲指定引脚到引脚的时序延迟;在电路中设置时序检查;定义specparam常量;...原创 2020-06-20 22:53:44 · 2676 阅读 · 0 评论 -
verilog | 七、常用关键字
-过程连续赋值:过程赋值:将值赋给寄存器,之一直保存在寄存器中,直到另一个过程赋值将另外一个值存放在该寄存器中;过程连续赋值:允许在有限时间段内将表达式的值连续地加到寄存器或线网。左边只能是寄存器或寄存器组。-assign和deassign:-force和release:可改写(覆盖)寄存器、线网上的赋值。或者-defparam:在任意模块调用中改变参数值。或者-条件编译和执行:某部分代码只有设置了特定的表之后才能被编译。编译指令(`if...原创 2020-06-20 22:52:38 · 2135 阅读 · 0 评论 -
verilog | 六、verilog中的任务和函数
1、任务和函数必须在模块中定义,也只能在定义它们的模块中使用。2、任务用于代替普通Verilog代码,可包含延迟、时序、事件等;函数用于代替表示纯组合逻辑的Verilog代码。-任务:关键字task-endtask。必须使用任务而不能使用函数的条件:1.程序中包含延迟、时序、事件控制结构;2.没有输出、输出变量数目大于1;3.没有输入变量。任务使用示例:或者:-自动(可重入)任务:task后加关键字automatic。由于任务中声明项的...原创 2020-06-20 22:50:51 · 1187 阅读 · 0 评论 -
verilog | 五、行为级建模
Verilog支持设计者从算法的角度,即从电路的外部行为对其进行描述。-结构化过程语句:initial语句和always语句。Verilog中的各个执行流程(进程)并发执行,每个initial语句和always语句代表一个独立的执行过程,每个执行过程从仿真时间零开始执行,两者不能嵌套使用。-initial语句:从仿真0开始顺序执行,整个仿真过程中只执行一次。若含多个initial块则其并发执行,且每个块各自独立。块内多条语句需用begin和end来组合。可以在变量声明同时进行初始化:.原创 2020-06-20 22:42:03 · 1502 阅读 · 0 评论 -
verilog | 附 操作符
附:操作符2020年2月26日15:36-算数操作符:-双目:加减乘除、求幂、取模。均同C。如果操作数的任一位为x,那么运算结果全部为x。即操作数值不确定,结果肯定不确定。-单目:正负(单目+-优先级高于双目+-),建议使用整数或实数形式表示负数。在Verilog中负数用其二进制补码表示。-逻辑操作符:逻辑与(&&)、逻辑或(||)、逻辑非(!)。1、计算结果为一位:0假、1真、x不确定。2、一操作数不为0,则等价为逻辑1;等于0,则等..原创 2020-06-20 22:40:23 · 4161 阅读 · 0 评论 -
verilog | 四、数据流建模
-数据流建模:根据数据在寄存器之间的流动和处理过程对电路进行描述,而不是直接对电路的逻辑门进行实例引用。-连续赋值语句:Verilog数据流建模的基本语句,用于对线网进行赋值。驱动强度是可选项,默认值为strong1和strong0;延迟值是可选项;1、连续赋值语句左值必须是一个标量或是向量线网,或是两者拼接。2、连续赋值语句总是处于激活状态。3、操作数可以是标量、向量线网、寄存器、函数调用。4、赋值延迟类似于门延迟,用于控制对线网赋予新值的时间。e.g.:assi.原创 2020-06-20 22:39:09 · 1776 阅读 · 0 评论 -
verilog | 三、门级建模
-门的类型:-与门、或门:输出端口排在最前面,输入端口有多个,依次排在输出端口之后;and a1(OUT, in1, in2, in3, in4);//类似这样-缓冲器、非门:可以有多个输出端口,只有一个输入端口且必须是实例端口列表的最后一个;buf b1(out, IN);//类似这样-带控制端的缓冲器、非门:控制信号有效是传递数据,无效时输出为高阻抗z-实例数组:允许定义门实例数组-门延迟:...原创 2020-06-20 22:37:23 · 2095 阅读 · 0 评论 -
verilog | 二、模块与端口
-verilog模块组成:-端口:模块与外界环境交互的接口。所有端口隐含地声明为wire类型。若希望输出端口保存数值,则需要显式的声明为reg类型;输入与双向端口不能被声明为reg类型。三种端口类型如下:input:输入;output:输出;inout:输入/输出双向端口;在声明端口数据类型时可以在模块端口列中声明(将端口声明嵌入到端口列表):在模块中定义的所有过程块(initial、always等、连续赋值语句、实例引用都是并行的。-端口连接规则:...原创 2020-06-20 22:35:16 · 2361 阅读 · 0 评论 -
verilog | 一、基本概念与层次建模
一、基本概念-大小写:相关,关键字均为小写;-注释:同C语言,//为单行注释/* 多行 注释 不允许再嵌套多行注释*/-操作符:同C,分单目、双目、三目;-数字声明:-指明位数:<size>'<base format><number>-<size>表示数字位宽度,表示位宽的数字前面加“-“(减号)表示其是一个负数,减号不能放于基数与数字之间。-基数格式有:十六进制('h或'H)、十进制('d或...原创 2020-06-20 22:32:02 · 1631 阅读 · 0 评论