No.5 Verilog 建模方式
5-1 门级建模
VerilogHDL内建基元门:
多输入门:and, nand, or, nor, xor, xnor;
多输出门:buf, not
三态门:bufif0, bufif1, notif0, notif1;
上拉、下拉门:pullup, pulldown;
MOS开关:cmos, nmos, pmos, rcmos, rnmos, rpmmos;
双向开关:tran, tranif0, tranif1, rtran, rtranif0, rtranif1;
示例1:2-4译码器
module dec24(a,b,en,dataout);
input a, b, en;
output [:]dataout;
wire abar, bbar; not #(,)
u0(abar, a);
u1(bbar, b);
nand #(,)
s0(dataout[],en,abar,bbar),
s1(dataout[],en,abar,b),
s2(dataout[],en,a,bbar),
s3(dataout[],en,a,b);
endmodule
示例2:主从触发器
module d_flipflop(d, clk, q, qbar);
input d, clk;
output q, qbar; not
n0(not_d, d),
n1(not_clk, clk),
n3(not_y, y);
nand
x1(d1,d,clk),
x2(d2,clk,not_d),
x3(y,d1,ybar),
x4(ybar,y,d2),
x5(y1,y,not_clk),
x6(y2,not_y,not_clk),
x7(q,qbar,y1),
x8(qbar,y2,q);
endmodule
5-2 数据流建模:
(1)连续性赋值语句:可以用来对线网进行赋值,不能用来对寄存器赋值。
如:
module full_adder(a,b,cin,sum,cout);
input a,b,cin;
output sum,cout; assign sum = a^b^cin;
assign cout = (a&cin)|(b&cin)|(a&b);
endmodule
(2)赋值延迟:assign #(rise,fall,turn_off); //上升延迟,下降延迟,截止延迟
三种形式:
assign # svm = bnm; //等同于assign #(2,2,2) svm = bnm;
assign #(,) svm = bnm; //等同于assign #(2,4,2) svm = bnm;第三项取前两项的最小值
assign #(,,) svm = bnm;
(3)线网延迟:
如:
wire # jkl;
一个模块可以包含多条initial和always语句,每条语句启动一个单独的控制流,而且在0时刻并行执行。
(2)事件控制:跳变沿控制、电平控制
@(posedge clk); // 正跳变沿
@(negedge clk); // 负跳变沿
@(posedge clr or negedge reset);//@(posedge clr, negedge reset);
(3)语句块
顺序块:begin ... end
并行块:fork ... join
顺序块中的语句按顺序执行,并行块中所有的语句在0时刻都执行,即并行执行。
(4)阻塞性赋值、非阻塞性赋值
阻塞性赋值:赋值操作符 = ,下一个语句执行之前,赋值语句必须全部执行完毕。
非阻塞性赋值:赋值操作符 <= ,按顺序计算表达式右侧所有的值,在语句块结束时同时赋给左边的变量。
*使用<=时不能出现assign,因为它是驱动变量的,而用 = 是驱动线网的。
(5)条件语句:if, else if, else
(6)case语句:
case(case_expr)
case_item : procedual_statement
...
endcase
(7)循环语句
forever
procedual_statement
//连续执行不停歇,可加终止语句。 repeat(loop_count)
procedual_statement
//按循环次数loop_count循环。 while(condition)
procedual_statement
//按循环条件循环。 for(initial_assignment; condition; step_assignment)
procedual_statement
// 类似C/C++。
(8)deassign: 用来结束对assign 的连续性赋值
tmp = ;
assign x = tmp;
assign x = tmp + ;
deassign x; //x一直保持x=7;
(9)force、release
force过程性语句对线网进行赋值时,该赋值语句将忽略该线网所有的其它驱动源,直到执行release语句。
(10)握手协议:略
(2)模块引用
module_name instance_name(port_associations);
port_expr //按位置连接
.PortName(port_expr) //按名称连接
例:
module half_adder(a,b,s,c);
...
endmodule
module full_adder(p,q,cin,sum,cout);
wire s1,c1,c2;
...
//引用
half_adder u1(x,y,s1,c1);//按位置连接
half_adder u2(.a(fin),.s(sum),.b(s1),.c(c2));//按位置连接
未连接端口则留空 (cc,,ll,...)
端口匹配:位宽不一致时,输入端口从端口表达式往端口赋值,输出端口从端口往表达式进行赋值。
(3)genertate语句
循环语句:genertate-loop
分支语句:genertate-case
条件语句:genertate-conditional
genertate
//循环语句
//分支语句
//条件语句
endgenertate
(4)配置
使用库声明:
library library_name "file_name"; //把指定名的文件编译进名为library_name的逻辑库中。
eg: library lib_rtl "./xx/cc/source.v"
映像库文件则由许多上述库声明语句组成的列表。
include library_map_file;
eg:esoc_lib.map
library lib_rtl "./xx/cc/source.v"
library lib_glp "./xx/mm/so.vg"
library lib_work "./xx/IP/s.v"
配置:确定实例与某个库中的某个单元对应的关系,其基本语法格式如下:
configuration config_name;
design rootModuleName;
default liblist list_of_libraries;
instance instance_name use library.cell;
instance instance_name liblist list_of_libraries;
cell cell_name use library.cell;
cell cell_name liblist list_of_libraries;
endconfig
场景例子:
//文件f1.v包含:
module m1;
m3 u0...
endmodule
module m2;
m3 u1...
endmodule //文件f2.v包含:
module m3;
m3 u2...
endmodule
module m4;
m3 u3...
endmodule //库映像文件内容:
library lib1 f1.v;
library lib2 f2.v; //编译之后,库中的文件如下:
Library lib1 contains cells m1,m2
Library lib2 contains cells m3,m4 //m1的配置:
configuration m1_config;
design lib1.m1;
default liblist lib2;
instance m1.u0 use lib2;
endconfig
No.5 Verilog 建模方式的更多相关文章
- 【转】Verilog HDL常用建模方式——《Verilog与数字ASIC设计基础》读书笔记(四)
Verilog HDL常用建模方式——<Verilog与数字ASIC设计基础>读书笔记(四) Verilog HDL的基本功能之一是描述可综合的硬件逻辑电路.所谓综合(Synthesis) ...
- Norflash控制器的Verilog建模之一
摘要:今天驱动一款SPANSION公司生产的norflash——S29AL032D70,没有别的参考资料,大致了解一下norflash的内部cmos电路架构以及其用途之后,直接看手册吧. 如何看手册: ...
- 利用python实现平稳时间序列的建模方式
一.平稳序列建模步骤 假如某个观察值序列通过序列预处理可以判定为平稳非白噪声序列,就可以利用ARMA模型对该序列进行建模.建模的基本步骤如下: (1)求出该观察值序列的样本自相关系数(ACF)和样本偏 ...
- 构建“元宇宙”,有哪些3D建模方式?
"沉浸.3D世界.虚拟社交.虚拟购物",最近"元宇宙"的概念特别火.人们畅想通过AR/VR以及其他互联网技术,把现实世界的楼房街道.天气温度.人际关系等投射到虚 ...
- Norflash控制器的Verilog建模之二(仿真)
前言:经过几天修改,norflash控制器基本已经完成,通过仿真.完整的norflash包含2个模块:直接操作硬件的norflash_ctrl.v与控制ctrl模块的驱动norflash_driver ...
- verilog 建模笔记--低级建模
来源 <verilog HDL那些事--建模篇> 1.并行建模的思想. 2.每个模块最好只有一个功能.(便于修改和扩展,特别在大的项目中) 典型的 HDL 教科书中,才不会要读者了解“模 ...
- SDRAM控制器的Verilog建模之一
前言:作为经典存储器的三剑客中的flash和sram已经建模测试过了,虽然现在都已经ddr2,ddr3,667MHZ.1333MHZ的天下了,但是接下这周来准备写一下sdram的controller. ...
- 异步SRAM控制器的Verilog建模
前言:sram顾名思义静态随机存储器,分为asram异步型和ssram同步型.这里驱动DE2上一块ISSI公司的512KB的asram. 设计思路:因为实际应用中单字节读写效率不高,所以本设计中仿照s ...
- I2C控制器的Verilog建模之三(完结版)
前言:终于到了测试篇,不过悲剧了一下.按照之前<二>里面的思路,在顶层用一个复用器驱动读写独立模块的I2C总线确实失败.虽然综合过去了,不过警告里已经说明:底层的2个原本是inout三态口 ...
随机推荐
- Access数据库连接字符串
<connectionStrings> <add name="connStr" connectionString="server=.;uid=home; ...
- Sublime Text3添加到右键快捷菜单教程(亲测可用)
前言: 安装Sublime Text3时,未选择右键快捷方式,可以通过下面的方式解决! 教程: 方法一: 新建sublime_addright.reg文件 编辑后双击打开就OK 注意:括号内是subl ...
- ajaxfileupload 上传使用demo
1.添加js引用 <script src="JS/jquery-1.4.2.min.js" type="text/javascript"></ ...
- tornado nginx 同源(Access-Control-Allow-Origin)错误处理记录
如果以下两个步骤操作完还是没有解决问题,可能是因为程序出了别的错误,因为后来的调试中不论出什么问题它都是会返回同源错误..呵呵哒 1.在nginx.conf里配置server,在location里添加 ...
- ACM中Java使用注意事项
1. String 类用来存储字符串,可以用charAt方法来取出其中某一字节,计数从0开始, 而不是像C/C++那样使用 []访问是每个字符. 2. 在主类中 main 方法必须是 public s ...
- Flink中的多source+event watermark测试
这次需要做一个监控项目,全网日志的指标计算,上线的话,计算量应该是百亿/天 单个source对应的sql如下 最原始的sql select pro,throwable,level,ip,`count` ...
- 第02章 Python快速入门
007.快速入门,边学边用 008.变量类型 print(type(变量)) 查看变量的了类型 现在常用的变量的类型有整型.浮点型.字符型 009.List基础模块 类型转换:str(8 ...
- Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal前序与中序构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15 ...
- shell 第一篇
1. 查看当前linux 支持的shell 类型 [root@nfs01 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash / ...
- 【vue】imitate-beautiful-thing
我从未见过这么美妙的项目,当然与我接触的项目少有关,但是这个项目满满的艺术气息,让人沉醉,让人忍不住的去研究代码. 先放项目地址:https://github.com/eidonlon/imitate ...