找回密码
 注册
关于网站域名变更的通知
查看: 241|回复: 2
打印 上一主题 下一主题

Verilog基本语法——模块

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-18 09:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
Verilog基本语法——模块

' b: b$ u$ M6 o- o3 l. T. L+ g) U, K
模块特点
; h, m2 |3 Y+ W2 h7 ?8 \Verilog HDL程序是由模块构成的。每个模块的内容都是嵌在module和endmodule两个语句之间。每个模块实现特定的功能。模块可以进行层次嵌套。1 P" I* T' K, j9 ~; Q9 k' ~, L4 Z
+ c& W6 ~7 \4 M) k4 B
每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行行为逻辑描述。
# j. F& b' B3 b3 H/ m  {3 i( _, _% D, n$ m) v9 T0 W7 o2 }# f
Verilog HDL程序的书写格式自由,一行可以写几个语句,一个语句也可以分写多行。
# b; |- S) K: F( u/ Z/ {8 \  k( [1 C$ ?/ N( K
除了endmodule语句外,每个语句和数据定义的最后必须有分号。$ }# }8 B6 W' _6 @/ g5 i
- V) x, R0 P4 P7 V4 }
可以用/…../和//…….对Verilog HDL程序的任何部分作注释。一个好的,有使
1 e6 }8 b* x1 q' a( Z- ^用价值的源程序都应当加上必要的注释,以增强程序的可读性和可维护性。
% o2 D5 Q) q0 g# M0 ~# x
  Z$ A% v8 A* x6 I模块的结构6 s3 W2 L. l5 |- \- A
module <模块名> (<端口列表>)# C8 v' d4 t& T! a6 ^0 s( Q+ F8 E
<I/O说明>
- w& Q4 q7 j- B( R, n6 s<内部信号声明>
$ y$ c9 k2 {; X9 {9 u<功能定义>
0 s$ l& a7 w/ ~2 k) k% W. Zendmodule2 @. |' h9 T) j- {: G8 S( K: k  G
11 F% t" ^- K0 O$ l, p
2# ?' p4 t( v5 d1 ]
3, Y( X$ \% B% z! V
4- X7 o0 l5 ~8 Z8 y& }& i5 B) g
5/ P+ W& Y3 H3 Y, |1 o- @; p
模块的端口定义:0 J" V4 r- y! [. J
模块的端口声明了模块的输入输出口。格式:4 R. v/ W& o  R/ ]
5 u* E, l+ }* g& |$ v1 N: [$ ?
module 模块名(口1,口2,口3,口4,......)1 U0 J1 t1 \( l, @3 {5 }2 f0 G: T# Z
1
/ ?6 @* p$ L  Y/ s8 F模块的内容:7 O9 i( b0 o# D9 z# j/ w
I/O说明: O, E$ M) P+ N5 W0 f" a
输入口(input 端口名1,端口名2,……端口名n)
3 l5 j+ }) z" A/ R1 X  i' B; W/ d2 G- v1 z, L
输出口(output 端口名1,端口名2,……端口名n)
$ x6 i8 i& u: X* c' w. a  B
  Z' _7 Y7 o# w0 v" K# TI/O\说明也可以卸载端口声明语句中: module module_name(input port1,input port2,…output port1,output port2…)* L4 o2 v$ S  {; ^4 q' |9 U
/ e7 Q, \+ B* Q0 `! X& ?% w; B
内部信号说明
  w  X) J! R" y9 A/ F. {. W在模块内用到的和与端口有关的wire和reg变量的声明,比如:reg[width-1:0] R1,R2…; wire[width-1:0] W1,W2…
9 c; {5 D! {/ e& `6 Z% I: Z! R! N
 功能定义, m* n$ t0 x/ d. }9 z6 T- ~
模块中最重要的部分是逻辑功能定义部分。有三种方法可在模块中产生逻辑:& A0 H6 M; Y$ {# u, h" G$ N
0 a4 A1 _( s% J& [% w
用“assign”声明语句
& _8 Y. k+ }- a4 P' D“assign”,后面再加一个方程式即可
: {& {! Q8 P2 W2 Y. F% p
4 q$ z% {; _- b/ p  dassign a = b & c;//两个输入的与门3 X  ]( w* @& ~3 Z4 L8 O/ U
1/ n' X( k1 O/ T
“assign”语句是描述组合逻辑最常用的方法之一
+ m* D& }, c5 E
( k; e$ \8 B8 k, k用实例元件+ l7 l! [8 Z* j3 H
and and_inst( q, a, b );* U* }7 X5 T. |# S, l
11 ^- m7 B/ E$ c1 N
采用实例元件的方法象在电路图输入方式下,调入库元件一样。键入元件的名字和相连的引脚即可,
! g+ G( J- m( y/ O' _# c' R0 g表示在设计中用到一个跟与门(and)一样的名为and_inst的与门,其输入端为a, b,输出为q。要求 - A: D& d; [& H" K# g0 o* A: e1 R
每个实例元件的名字必须是唯一的,以避免与其他调用与门(and) 的实例混淆。
: y6 ?9 {8 r9 l3 q, `1 z7 z, r) P+ {+ g) T) _. k2 T$ |3 @2 @& X
用“always”块
4 r4 `5 Y: f6 ?0 K1 `- g# i# H6 ?always @(posedge clk or posedge clr): Q% J& T7 G9 d4 j2 s$ P
begin* E" D+ C7 I; {# P, g
if(clr) q <= 0;8 W7 o6 i* k) l& ^7 M6 h
else if(en) q <= d;
1 Z0 T! n: ]! f! U' `6 Jend
1 B* B) w- y1 k/ G/ V: S% h/ T//带有异步清除端的D触发器$ W& B$ [( }; `  B

; y  l9 p3 U( T8 l% R  |% B“always”块既可用于描述组合逻辑也可
* e$ E7 A9 ~0 U" N- `描述时序逻辑.“always”模块内,逻辑是按照指定的顺序执行的,两个或更多的“always”模块也是同时执行的,但是模块内部的语 * \* o- s; V* I' |* |
句是顺序执行的

  d, y0 T' j1 a( T
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-30 01:19 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表