No.2 Verilog 模块和描述风格
2-1 模块
Verilog语言基本的描述单元----模块,模块是用来描述某个设计的功能或结构,以及它与其它外部模块进行通信的端口。
module module_name(port_list);
Declarations: //声明
reg, wire, parameter,
input, output, inout,
function, task,...
Statements: //语句
Initial statement
Always statement
Module instantiation
Gate instantiation
UPD instantiation
Continuous assignment
Generate statement
endmodule
2-2 描述风格
2-2-1 延时
Verilog 的所有延时都是按时间单位来定义的,时间单位声明应该在模块声明之前。
‘timescale 1ns/100ps //延时时间单位1ns,时间精度100ps
2-2-2 描述风格
1、数据流描述----使用连续性赋值语句 assign
assign [delay] DEST = SRC;
*当右边的表达式的操作数无论何时发生变化,右边的表达式都会重新计算,并在指定延时后赋给左边的线网变量。
‘timescale 1ns/100ps
module decoder_24(A, B, EN, Q);
input A, B, EN;
output [:] Q;
wire Abar, Bbar;
assign # Abar = ~A;
assign # Bbar = ~B;
assign # Q[] = ~(Abar & Bbar & EN);
assign # Q[] = ~(Abar & B & EN);
assign # Q[] = ~(A & Bbar & EN);
assign # Q[] = ~(A & B & EN);
endmodule
2、行为描述----initial、always
(1)initiial: 只执行一次;
(2)always:总是在循环执行。
所有的initial和always语句都在0时刻并行执行。
‘timescale 1ns/100ps module adder1(a, b, cin, sum, cout);//一位全加器
input a, b, cin;
output sum, cout; always @(a or b or cin) begin
sum <= (a^b)^cin;
cout <= ((a&cin)|(b&cin)|(a&b));
end
endmodule module test(lr ,rn); //initial示例
output reg lr, rn;
initial
begin
lr = ;
rn = ;
lr = # ;
rn = # ;
end
endmodule
3、结构描述----基于逻辑门电路的设计风格
//一位全加器 module adder1(a, b, cin, sum, cout);
input a, b, cin;
output sum, cout;
wire s1, t1, t2, t3;
xor
ux1(s1, a, b),
ux2(sum, s1, cin);
and
tm1(t1, a, b),
tm2(t2, a, cin),
tm3(t3, b, cin);
or
uo(cout, t1, t2, t3);
endmodule //四位全加器 module Adder4(fa, fb, fcin, fsum, fcout);
parameter size = ;
input [size : ] fa, fb;
input fcin;
output [size : ] fsum;
output fcout;
wire [size - : ] ftemp; adder1 //按对应端口名连接
ufa1(.a(fa[]), .b(fb[]), .cin(fcin), .sum(fsum[]), .cout(ftemp[])),
//ufb1(fa[0], fb[0], fcin, fsum[0], ftemp[0]), //按端口顺序连接,下同
ufa2(.a(fa[]), .b(fb[]), .cin(ftemp[]), .sum(fsum[]), .cout(ftemp[])),
ufa3(.a(fa[]), .b(fb[]), .cin(ftemp[]), .sum(fsum[]), .cout(ftemp[])),
ufa4(.a(fa[]), .b(fb[]), .cin(ftemp[]), .sum(fsum[]), .cout(fcout));
endmodule
4、混合设计风格
在模块中,可混合使用前面三种设计风格,这样可以帮助我们更高效地进行设计开发,但要注意不同类型语句的语法使用规范。
No.2 Verilog 模块和描述风格的更多相关文章
- Verilog模块概念和实例化#转载自Jason from Lofter
Verilog模块概念和实例化 模块的概念 模块(module)是verilog最基本的概念,是v设计中的基本单元,每个v设计的系统中都由若干module组成. 1.模块在语言形式上是以关键词modu ...
- 如何将自己写的verilog模块封装成IP核
如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...
- 利用python自动生成verilog模块例化模板
一.前言 初入职场,一直忙着熟悉工作,就没什么时间更新博客.今天受“利奇马”的影响,只好宅在家中,写写技术文章.芯片设计规模日益庞大,编写脚本成了芯片开发人员必要的软技能.模块端口动不动就几十上百个, ...
- 浅谈Verilog HDL代码编写风格
消失了好久,没有写文章,也没有做笔记,因为最近再赶一个比赛,时间很紧,昨天周六终于结束了,所以趁着周末这会儿有时间,写点东西,记录下来.首先我学习FPGA才一年多,我知道自己没有资格谈论一些比较深层次 ...
- Verilog 模块参数重定义(转)
Verilog重载模块参数: 当一个模块引用另外一个模块时,高层模块可以改变低层模块用parameter定义的参数值,改变低层模块的参数值可采用以下两种方式: 1)defparam 重定义参数语法:d ...
- Link带参数的Verilog模块(Design Compiler)
在Design Compiler中,Verilog文件可以用read_verilog命令读入,用link命令连接.以下是连接两个文件RegisterFile.v和Test.v的脚本: # Read d ...
- verilog 常见单元描述
半加器: //行为级建模 module half_adder2(a, b, sum, c_out); input a, b; output sum, c_out; assign {c_out, sum ...
- 对Verilog 初学者比较有用的整理(转自它处)
*作者: Ian11122840 时间: 2010-9-27 09:04 ...
- Scheme实现数字电路仿真(3)——模块
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/12242650.html 作者:窗户 ...
随机推荐
- Django项目:CRM(客户关系管理系统)--69--59PerfectCRM实现king_admin行内编辑
#base_admin.py # ————————24PerfectCRM实现King_admin自定义操作数据———————— from django.shortcuts import render ...
- PAT甲级——A1037 Magic Coupon
The magic shop in Mars is offering some magic coupons. Each coupon has an integer N printed on it, m ...
- Spring Cloud Security&Eureka安全认证(Greenwich版本)
Spring Cloud Security&Eureka安全认证(Greenwich版本) 一·安全 Spring Cloud支持多种安全认证方式,比如OAuth等.而默认是可以直接添加spr ...
- 在Ubuntu Server 14.04上源码安装Odoo 9.0
1. 更新Ubuntu服务器软件源 sudo apt-get update #更新软件源 sudo apt-get dist-upgrade #更新软件包,自动查找依赖关系 sudo shutdown ...
- php5.3中namespace的说明,帮助初次接触namespace的phper快速理解
命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀,但是方法名变的很长 ...
- Windows Apache httpd-vhosts.conf
<VirtualHost *:> DocumentRoot "D:\wamp\www" ServerName localhost </VirtualHost> ...
- git与github建立链接(学习笔记)
总结步骤: 1.将所有文件添加到本库 git add . 2. git commit -m "提示信息随便写" 3.查看git修改状态 git status 4.获取远程库与本地同 ...
- 调用本地摄像头并通过canvas拍照
首先我们需要新建一个video标签,并且放到html里边 var video = document.createElement("video"); video.autoplay=& ...
- java -cp ../../DESUtil/ Hello,用-cp指定classpath
运行hello.class 文件 怎么用 java +路径 就是不在class目录下运行 怎么做??? 我想要的是 java 直接去运行某个路径下的class文件 不想到它的目录那里再java hel ...
- MySQL下载安装详情教程(Windows)
1.下载MySQL数据库可以访问官方网站:https://www.mysql.com/ 2.点击DOWNLOADS模块下的Community模块下的MySQL Community Server进行下载 ...