在看Dolby公司的工程师编写的VHDL代码时,发现他们将工程及其子模块全部放在同一个文件中,刚开始看得我头晕晕的,后来发现可以通过顶层实体进行查看其RTL视图,从而理清各个模块间的关系。方法如下:Project Navigator-->Hierarchy-->Entity-->在顶层文件上右击-->Locate-->Locate in RTL'Viewer。就可以打开RTL视图了。太牛了。此外SDC约束文件可以加载多个。
LVDS的TX和RX数据和时钟引脚都必须进行约束,且RX数据和时钟引脚还得加上差分约束,具体如下所示:
此外更重要的一点是输入时钟尤其是差分时钟的输入最好通过一个clk_buf缓冲输出(Altera中的模块是ALTCLKCTRL),这样才能正确显示,且LVDS_RX的8组输入时钟经过BUF处理后不会出现PLL上的错误。
# | module altera_lvds_rx_1
set_instance_assignment -name IO_STANDARD LVDS -to LVDS_RX1_p[0]
set_location_assignment PIN_D6 -to LVDS_RX1_p[0]
# | module altera_lvds_tx_1
set_instance_assignment -name IO_STANDARD LVDS -to LVDS_TX1_p[0]
set_location_assignment PIN_A2 -to LVDS_TX1_p[0]
# +-----------------------------------
set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to LVDS_RX*
set_instance_assignment -name INPUT_TERMINATION DIFFERENTIAL -to LVDS_CLKIN*
来源:http://wenku.baidu.com/view/f4b507563c1ec5da50e270ba.html
http://www.doc88.com/p-675124532917.html
SDC约束文件的编写,在TimeQuest Timing Analyzer中可以看到需要约束的时钟数目。
TimeQuest Timing Analyzer-->Reports-->Diagnostic-->Report Clocks
##############################################################################
####
#Generated by: zlh840
#Purpose : To verify gate-clock conversion using quartus 12.0
#Project : RX2TX_5CH
#Revision : None
#
#Date :11/26/2012 M/D/Y
#
##############################################################################
####Time Information
set_time_format -unit ns -decimal_places 3
#Create_clock for system and its duty cycle is 5:5
create_clock -name {altera_reserved_av_osc_clk} -period 22.500 -waveform { 0.000 11.250 } [get_pins {*|arriav_oscillator|clkout}]
create_clock -name {altera_reserved_tck} -period 100.000 -waveform { 0.000 50.000 } [get_ports {altera_reserved_tck}]
create_clock -name {CLK27A_IN} -period 37.037 -waveform { 0.000 18.519 } [get_ports {CLK27A_IN}]
#Create_clock for LVDS1_RX_CLK but its duty cycle is 4:3
create_clock -name LVDS_RX_CLK_1 -period 12.5 -waveform {0 7.143} [get_ports {LVDS_CLKIN1_p}]
create_clock -name LVDS_RX_CLK_5 -period 12.5 -waveform {0 7.143} [get_ports {LVDS_CLKIN5_p}]
derive_pll_clocks
create_clock -name virtual_clock_lvds -period 12.500 -waveform {0 7.143}
set_input_delay -clock [get_clocks virtual_clock_lvds] -max 0.200 [get_ports LVDS_RX1_p*] -add_delay
set_input_delay -clock [get_clocks virtual_clock_lvds] -min -0.200 [get_ports LVDS_RX1_p*] -add_delay
set_input_delay -clock [get_clocks virtual_clock_lvds] -max 0.200 [get_ports LVDS_RX2_p*] -add_delay
set_input_delay -clock [get_clocks virtual_clock_lvds] -min -0.200 [get_ports LVDS_RX2_p*] -add_delay
set_input_delay -clock [get_clocks virtual_clock_lvds] -max 0.200 [get_ports LVDS_RX3_p*] -add_delay
set_input_delay -clock [get_clocks virtual_clock_lvds] -min -0.200 [get_ports LVDS_RX3_p*] -add_delay
set_input_delay -clock [get_clocks virtual_clock_lvds] -max 0.200 [get_ports LVDS_RX4_p*] -add_delay
set_input_delay -clock [get_clocks virtual_clock_lvds] -min -0.200 [get_ports LVDS_RX4_p*] -add_delay
来源:http://www.cnpetweb.com/a/xinxizhongxin/lanmu9/2011/1125/27182.html
来源:http://bbs.ednchina.com/BLOG_ARTICLE_1909737.HTM
在Quartus II的菜单里找到了一个好去处:language template。
在Edit -> Insert Template下可以看到Verilog HDL、SystemVerilog、VHDL、AHDL、Quartus II TCL、TCL的语言模板。
在Verilog HDL下面,可以找到基本的逻辑操作符、基本语言结构,甚至是完整的设计。
其中的基本语言结构和操作符可用来在编程时参考,而完整的设计作为自学语言的实例是再好不过了。这些完整的设计不仅仅是语法上结构完整,其书写格式、参数化、注释都很标准,从中可以学到许多优秀的编码风格和特殊功能的描述方法。
比如,双端口RAM的描述中就有关于读写同时操作时,读取返回的值是新值还是旧值的区别,采用阻塞和非阻塞赋值就可以在综合后的代码中得到这样的差别。
同样,在其他EDA工具中也有类似的语言模板,都可以作为我们提高编码水平的助手。