![]() |
|
||||||||||||||
| | 网站首页 | 综合电子 | 51单片机 | AVR单片机 | ARM专栏 | MSP430 | 网上商城 | 下载中心 | 技术论坛 | 公司事项 | DSP专栏 | | ||
|
||
|
|||||
| Verilog技术实践教程(2) | |||||
| Verilog技术实践教程(2) | |||||
作者:未知 文章来源:网络 点击数: 更新时间:2007-10-11 ![]() |
|||||
|
Verilog语言的基本设计单位为模块,即module,一个模块包括模块名、输入输出端口定义、完成该模块的功能描述部分、底层模块实例引用、组件及系统函数等。 一、模块和宏模块 1、模块 上次我们讲了模块。你如果有程序设计基础知识的话,可以把模块当成函数或者过程都可以,这样便于理解。一个模块的语法如下: module 模块名称 (输入输出列表); 输入输出名称申明; 模块内部结构; endmodule 其中输入输出列表和输入输出名称申明是可选的。 2、宏模块 为了仿真的方便,Verilog支持宏模块,即Macro module,综合时,宏模块的内容将替代调用宏模块名称的地方。下面是一个宏模块的定义例子: macromodule nand(a,b,c); input a,b; output c; wire out_and; assign out_and = a and b; assign c = ~out_and; endmodule 如果你在某个模块中调用了宏模块nand,那么,在综合的时候,宏模块的内容将出现在调用该宏模块名称的地方。 二、端口 所谓的端口是指模块与外界联系的输入/输出连接。例如: module dff(d,clock,rest,q); input d,clock,rest; output q; .... endmodule 在上例中,d、clock、rest、q都是端口,其中input语句定义了d、clock、rest都是输入端口,output语句定义了q是输出端口。 三、模块实例的引用 编好一个模块后,要在需要使用它的地方定义该模块的引用,就好比调用过程或者函数。引用的格式是: <模块名称> <实例名称>(引脚列表); 下面是一个例子: module dff(din,clock,q); input din,clock; output q; reg q; always@(posedge clock) q=din; endmodule
module mux2(ma,mb,s,mout); input ma,mb,s; output mout; assign mout = s?ma:mb; endmoudle
module a(da,db,sel,clk,q); input da,db,sel,clk; output q; wire qa,qb; dff dff1(.din(da),.q(qa),.clock(clk)); dff dff2(.din(db),.clock(clk),.q(qb)); mux2 mux(.ma(qa),.mb(qb),.s(sel),.mout(q)); endmodule
在这个例子中,首先定义了两个模块,分别是D触发器和数据选择器,在a模块进行高层连接时,需要注意的一点就是引用下层模块时,连接引脚需要同时告诉编译器引脚的形参和实参,比如dff1中da连接的是din,因此需要用.din(da)连接。这样的好处在于很容易可以检查出连线不正确的输入。 好,今天就先讲到这里。下次我们继续学习。 |
|||||
| 文章录入:dycxin 责任编辑:dycxin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 基于VHDL的异步串行通信电路 ALTERA的假货识别方法 Verilog 技术实践教程(1) 10分钟学会PLD设计1-设计输 浅谈VHDL/Verilog的可综合性 选择 VHDL 还是 verilog HDL |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | | 设为首页 | 购买方法 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 联系我们 | 网络答疑| | | |||
|