cpld的verilog学习.docxVIP

  • 13
  • 0
  • 约4.21万字
  • 约 57页
  • 2017-01-30 发布于重庆
  • 举报
cpld的verilog学习

/whm0077/article/details/6120832cpld的verilog学习2011-01-06 17:17?2842人阅读?/whm0077/article/details/6120832评论(0)?javascript:void(0);收藏?/whm0077/article/details/6120832举报/tag/integerinteger/tag/%e5%ad%98%e5%82%a8存储/tag/%e8%af%ad%e8%a8%80语言/tag/%e7%bc%96%e8%af%91%e5%99%a8编译器/tag/modulemodule/tag/inputinput以前浪费了太多机会了。以后就用这些来记录下自己到底学会了什么。用到了什么。做出了什么。verilog的整体结构模块的结构verilog的基本设计单元是“模块”(block)。包括(接口描述、逻辑功能描述)例子:module block(a, b, c, d); input?a, b; output c, d;?????assign?c = a | b;【连续赋值:assign,问号表达式(?:)】 assign d = a b;endmodule由例子可以看出,verilog结构位于在module和endmodule声明语句之间,每个verilog程序包括4个主要部分:端口定义、I/O说明、内部信号声明和功能定义。1、 模块的端口定义模块端口声明了模块的输入输出。格式:module 模块名(口1,口2,口3,口4,…..);模块的端口表示模块的输入还是输出名。引用模块时其端口可以用两种方法连接:(1) 在引用时,严格按照定义的端口顺序连接,不用标明原模块定义时规定的端口(2)?在引用时用”.”符号,标明原模块是定义时规定的端口名。2、 模块内容模块的内容包括I/O说明、内部信号声明和功能定义。(1) I/O说明的格式输入口:input [信号位宽-1 : 0] 端口名1;输出口:output [信号位宽-1 : 0] 端口名1;输入输出口:inout [信号位宽-1 : 0] 断口名1;(2)??内部信号说明在模块内用到的与端口有关的wire和reg类型变量的声明。??Reg [width-1 : 0] R变量1,R变量2…;?【reg不和实际的电路如寄存器对应,高层次的描述时用】Wire [width-1 : 0]W变量1,W变量2…;【与实际的物理连接对应】(3) 功能定义模块中最重要的部分时逻辑功能定义。由3种方法可以在模块中产生逻辑。1) 用assign声明语句如assign a = bc;2) 用实例元件and #2 u1(q, a, b);3) 用always块【变量必须声明为reg,还有initial。】always?@(posedge clk or posedge clr)beginif(clr) q = 0;else if(en) q = d;end采用assign是描述组合逻辑最常用的方法之一。而always既可用来描述组合逻辑电路也可以用来描述时序逻辑。(4) 要点1)?在verilog模块中所有过程块(initial, always)、连续赋值语句、实例引用都是并行的;2) 他们表示的是一种通过变量名互相连接的关系3) 在同一模块中这三者出现的先后顺序没有关系。只有联系赋值的语句assign和实例引用语句可以独立与过程块而存在于模块功能定义部分??程序例子? 偶数分频器的verilog实现(先学习偶数,我用的单片机用到分频器)?偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。这种方法可以实现任意的偶数分频。module odd_division(clk,rst,count,clk_odd); input??????? clk,rst; output?????? clk_odd; output[3:0]? count;?reg????????? clk_odd; reg[3:0]???? count;??parameter??? N = 6;?【常数】?? always @ (posedge clk)【always模块:(敏感表可以为电平、沿信号posedge/negedge;通常和@连用)】 if(! rst)【任务定义:task……endtask】? begin count = 1b0;【?赋值符号:=?和?=?(阻塞和非阻塞赋值,在具体设计中时很有讲究的)】 clk_odd = 1b0; end e

文档评论(0)

1亿VIP精品文档

相关文档