基于Altera Quartus II的模块化设计应用

转载 2012年03月26日 15:12:07
个人档案

基于Altera Quartus II的模块化设计应用


 


       和ISE不一样,Quartus II代码的模块化视图并不是你把子模块例化到顶层模块以后就能马上在工程代码窗口看到一个清晰的层次图。而是必须在你编译后才能够看到层次化的视图。


 


       我在这里列举一个串口通信(实验10)的实例:


       编写完该HDL的代码,还没有编译,此时在Project Navigator窗口中只有顶层模块my_uart_top。




       顶层模块如下(详细的注释代码请参考相关实验):


////////////////////////////////////////////////////////////////////////////////


module my_uart_top(


                            clk,rst_n,


                            rs232_rx,rs232_tx


                            );


input clk;


input rst_n;


input rs232_rx;


output rs232_tx; 


wire bps_start1,bps_start2;


wire clk_bps1,clk_bps2;


wire[7:0] rx_data;


wire rx_int;  


////////////////////////////////////////////


speed_select        speed_rx(    


                                                 .clk(clk),                                                                                                                       .rst_n(rst_n),


                                                 .bps_start(bps_start1),


                                                 .clk_bps(clk_bps1)


                                          );


 


my_uart_rx                 my_uart_rx(       


                                                 .clk(clk),                                                                                                                       .rst_n(rst_n),


                                                 .rs232_rx(rs232_rx),


                                                 .rx_data(rx_data),


                                                 .rx_int(rx_int),


                                                 .clk_bps(clk_bps1),


                                                 .bps_start(bps_start1)


                                          );


 


///////////////////////////////////////////                                        


speed_select        speed_tx(    


                                                 .clk(clk),


                                                 .rst_n(rst_n),


                                                 .bps_start(bps_start2),


                                                 .clk_bps(clk_bps2)


                                          );


 


my_uart_tx                 my_uart_tx(       


                                                 .clk(clk),


                                                 .rst_n(rst_n),


                                                 .rx_data(rx_data),


                                                 .rx_int(rx_int),


                                                 .rs232_tx(rs232_tx),


                                                 .clk_bps(clk_bps2),


                                                 .bps_start(bps_start2)


                                          );


Endmodule


 


       我们一般不在顶层模块做任何逻辑设计,哪怕只是一个逻辑与操作。比较好的设计会明确的区分每一个模块单元。在上面这个设计中,是要实现一个串口自收发通信的功能。具体说就是不断的检测串口接收信号rs232_rx是否有数据,如果接收到起始位就把数据保存,然后再转手把接收到的数据通过串口发送信号rs232_tx发回给对方。即使是这样一个还不算太复杂的功能,如果都堆到一个模块里,代码不仅又臭又长,编写代码者如果不理好思路很容易自己就写晕了,以后维护起来或者要移植就更难了。


所以,模块化的设计势在必行。上面的代码把这个设计分成了四个模块:


1、My_uart_tx:串口数据接收模块;


2、Speed_tx:串口数据接收时钟校准模块;


3、My_uart_rx:串口数据发送模块;


4、Speed_rx:串口数据发送时钟校准模块。


       如此划分,层次清晰而且思路明确,写起代码来更是游刃有余。先来说模块例化的一些细节吧。就拿speed_select模块例化来看。第一行的speed_select            speed_rx,其中speed_select是要例化的模块名,是固定的;而speed_rx则是你任意给这个模块取的名字,它是用于区分例化多个相同的模块。就如speed_tx和speed_rx两个模块,因为它们的逻辑设计都是一样的,所以写一个模块,然后在例化的时候给个不同的名称就可以了。这有点类似软件设计中的子程序调用,但又有不同,由于硬件设计的并行性,这里的逻辑复制实际上在最后的硬件上是实现了两个一模一样的speed_select设计原型,可以说它们是完全独立的。即便是对于硬件资源的消耗没有减少,采用模块化设计以后也能从很大程度上减少设计者的重复劳动。


       信号的例化是这样的.clk(clk),点号后的clk代表例化模块内部的信号(是固定的,必须和内部的信号名一致),而括号内的clk则是例化模块的外部连接,可以例化模块内的信号名不同。


       在编译后,可以从Project Navigator窗口中看到例化的子模块:




 


另外,从Quartus II提供的RTL视图里,我们能够更深刻的感受到模块化带来的层次感:



点击看大图
转自:http://bbs.ednchina.com/BLOG_ARTICLE_184341.HTM

Altera Quartus II11.0开发流程

1、首先打开Quartus II11.0 2、新建文件 File—New,新建一个verilog.v文件 3、保存文件,在新建的文件里面随便打,然后保存,保存到自己的工作文件下(每次建项目都记...
  • aiqin138
  • aiqin138
  • 2015年04月26日 22:10
  • 812

基于Quartus II 的FPGA/CPLD数字系统设计与应用(原理图编辑)

本文基于Quartus II 13.0版本举例说明原理图编辑的流程。 1 .建立新的工程 1). 指定工程名称:File->New Project Wizard打开向导对话框,选择工程路径和填写工...
  • u013232740
  • u013232740
  • 2015年08月07日 23:10
  • 826

FIR滤波器仿真--基于Quartus II的FIR Compiler II IP核的脚本仿真

FIR滤波器仿真--基于Quartus II的FIR Compiler II IP核的脚本仿真,数字滤波器有更高的精度,更高的信噪比,更高的可靠性。第一步 仿真并生成滤波器的系数;第二步 生成FIR ...
  • heshiliqiu
  • heshiliqiu
  • 2017年07月23日 09:19
  • 2403

FPGA程序如何模块化设计?

综合与可综合的HDL设计 综合的定义 综合就是针对给定的电路实现功能和实现此电路的约束条件,如速度、功耗、成本及电路类型等,通过计算机进行优化处理,获得一个能满足上述要求的电路设计...
  • wangkeyen
  • wangkeyen
  • 2013年12月05日 09:41
  • 9919

quartus ii IP核的破解

IP核破解与否只是在于license的区别。按照俊龙的方法破解完quartus以后,再把license设置成以下内容即可。 FEATURE quartus alterad 2035.12 p...
  • kobesdu
  • kobesdu
  • 2015年12月08日 17:34
  • 4071

关于Quartus II工程综合时间过长问题的解决

通过阻止寄存器融合缩短Quartus II工程综合时间
  • love_ljq
  • love_ljq
  • 2017年11月19日 20:46
  • 211

quartus 生成pof的设置

在assignments -- device -- device and pin option, 在configuration 选项卡当中,要勾上Use Configuration device,并选...
  • zhangyanquen
  • zhangyanquen
  • 2010年06月29日 14:47
  • 3339

用Quartus II Timequest Timing Analyzer进行时序分析 :实例讲解

一,概述 用Altera的话来讲,timequest timing analyzer是一个功能强大的,ASIC-style的时序分析工具。采用工业标准--SDC(synopsys design ...
  • a8039974
  • a8039974
  • 2016年06月26日 09:03
  • 5066

怎样从altera下载软件与器件库

首先要注册一个帐号,否则是不能下载的。 step1:进入support->download 这是页面下方的显示,可以选择想要安装的Quartus版本以及该版本支持的器件。这里以16.0标准版为例,...
  • chineseboy11
  • chineseboy11
  • 2016年11月17日 14:36
  • 1512

Altera硬IP开发PCIe 之一 Quartus II-15.0.0.145 安装

准备使用ALTERA的Arria V GX芯片做PCIe接口芯片,可是看到原来用的12.1版本的Quartus II不支持Arria V GX芯片,所以就上官网搜索新版的Quartus II,就索性下...
  • molake10344
  • molake10344
  • 2015年09月15日 13:39
  • 4177
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于Altera Quartus II的模块化设计应用
举报原因:
原因补充:

(最多只允许输入30个字)