Verilog设计小技巧

一、verilog中重复引用宏定义文件,报warning

“micro is redefined”

warning即可清除

二、状态机(Moore状态机和Mealy状态机)

来源:https://blog.csdn.net/qq_36248682/article/details/105595799

根据状态机的输出是否与输入条件相关来区分Moore状态机和Mealy状态机。

Moore状态机:输出仅仅与当前状态有关;

如下实例,如三段式写法来写的一个序列检测的状态机(【 FPGA 】序列检测器的Moore状态机实现),状态机最后的输出部分:

always @*

begin

    if(current_state == s4) dout = 1;

    else dout = 0;

end

由此可见,Moore状态机仅仅和当前状态有关。

也可以看状态转移图判断:

Mealy状态机:输出不仅取决于当前状态,还和输入有关;

同样,如下序列检测的例子:【 FPGA 】序列检测器的Mealy状态机实现

同样是三段式描述,状态机的输出部分为:

always @ *

begin

if(reset) dout = 1'b0;

else if( (current_state == s3)&&(din == 1'b1) ) dout = 1'b1;

else dout = 1'b0;

end

同样,也可以通过状态转移图判断:

可见,输出不仅和当前状态和输入都有关系。

最后,Moore状态机和Mealy状态机可以相互转换。上述两个状态转移图实际上实现的是同一个功能,就是检测序列1101.

三、二段状态机的初始化

从verilog语法上好像是有意义的(但作用不大),但实际电路上,第一个NS=3'bx 写与不写,与实际生成的电路不会有区别。VHDL中设计还比较普遍。

可能的好处:主要看仿真异常比较方便

​​​​​​​四、跨die处理

基于Xilinx跨die FPGA的逻辑设计 | 电子创新网赛灵思社区

Xilinx FPGA时序收敛实战总结 - 知乎

https://blog.csdn.net/linbian1168/article/details/105690217

多die芯片其实是SSI(Stacked Silicon Interconnect)芯片,其结构如下图所示。其实就是在一个封装里,把多个芯片,也就是我们说的SLR(Super Logic Region)用interposer“绑”在一起,SLR之间的连接用专用布线资源SLL(Super Long Line)。

从方案架构设计的角度看,FPGA的设计也就是数据流的设计,即数据流在不同模块之间的走动。

在具体实现中,对于跨die的信号处理,官方的文档(ug949)中提供了2种方式,一种是通过约束的方式使用LAGUNA寄存器,一种是通过自动流水打拍的方式

复位信号的处理。跨die逻辑中有一类时序收敛问题就是复位信号的问题。

1.跨die路径尽可能减少,跨die两边信号都必须为寄存器类型,最好使用多级寄存器,打拍寄存器约束到临近die的clock region;

2.时钟clock,Reset信号尽量不要跨die,跨die会增加时钟skew;

3.尽量保持数据流单向,边界附近画跨die Pblock;

4.跨die路径时钟频率最高550MHz;

5.时钟clock,reset不建议使用set max_fanout;

​​​​​​​五、异步fifo

Vivado对异步fifo的XDC设置:

看vivado的IP xdc默认的设置:(为啥是##,不使用,还要再检查一下)

#set wr_clock          [get_clocks -of_objects [get_ports wr_clk]]
#set rd_clock          [get_clocks -of_objects [get_ports rd_clk]]
#set wr_clk_period     [get_property PERIOD $wr_clock]
#set rd_clk_period     [get_property PERIOD $rd_clock]
#set skew_value [expr {(($wr_clk_period < $rd_clk_period) ? $wr_clk_period : $rd_clk_period)} ]


# Set max delay on cross clock domain path for Block/Distributed RAM based FIFO

## set_max_delay -from [get_cells inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/*rd_pntr_gc_reg[*]] -to [get_cells inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/*gsync_stage[1].wr_stg_inst/Q_reg_reg[*]] -datapath_only [get_property -min PERIOD $rd_clock]
## set_bus_skew -from [get_cells inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/*rd_pntr_gc_reg[*]] -to [get_cells inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/*gsync_stage[1].wr_stg_inst/Q_reg_reg[*]] $skew_value

## set_max_delay -from [get_cells inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/*wr_pntr_gc_reg[*]] -to [get_cells inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/*gsync_stage[1].rd_stg_inst/Q_reg_reg[*]] -datapath_only [get_property -min PERIOD $wr_clock]
## set_bus_skew -from [get_cells inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/*wr_pntr_gc_reg[*]] -to [get_cells inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/*gsync_stage[1].rd_stg_inst/Q_reg_reg[*]] $skew_value
#set_false_path -from [get_cells -hierarchical -filter {NAME =~ *gsckt_wrst.gic_rst.sckt_wrst_i_reg}] -to [get_cells -hierarchical -filter {NAME =~ *gsckt_wrst.gic_rst.garst_sync_ic[1].rd_rst_inst/Q_reg_reg[0]}]
#set_false_path -from [get_cells -hierarchical -filter {NAME =~ *gsckt_wrst.gic_rst.garst_sync_ic[3].rd_rst_inst/Q_reg_reg[0]}] -to [get_cells -hierarchical -filter {NAME =~ *gsckt_wrst.gic_rst.garst_sync_ic[1].rd_rst_wr_inst/Q_reg_reg[0]}]

一个具体的应用:

因此vivado中设置:
1)、set_max_delay约束格雷码信号延时在一个源时钟周期之内(控制空满标识的延迟)
2)、set_bus_skew在两个时钟间较块的一个时钟周期内(防止出现错误,丧失格雷码的意义)

六、​​​​​​​FPGA为啥建议不使用CE

        这是一份A7的资料,可以看到CE的setup和hold时间远大于D pin的要求,因此使用CE会降低整块FPGA的时序。

        但芯片基于功耗的考虑,另当别论。

七、​​​​​​​FPGA管脚的延时信息

可以通过tcl指令子啊空白工程下生成对应器件型号的pin delay文件:

八、xilinx文件后缀说明

*.bit 下载配置文件。
*.bld 报告文件。
*.edn 综合后生成的网表文件。
*.dly 异步延时报告对于最坏的20个路径。
*.fdo 自动创建的仿真宏文件。
*.fnf 文件为floorplan 文件。
*.mpf 文件来存储对设计的物理约束。
*.mfp 由Floorplanner产生的布局规划期的实现指导文件。
*.mrp 映射报告文件。
*.nav 报告文件和bld一样的内容但是察看方式不同。
*.ngd 综合之后的包含了ucf和网表信息的文件。
*.ngc 包含了逻辑设计数据和约束的网表。
*.ncf 网表的约束文件工具自动生成与ucf一样但ucf优先级更高。
*.nmc 物理宏库单元文件包含了物理宏库的定义同时这个物理宏可以在FPGA底层编 辑器中以及HDL编码中实例化。
*.nce 布局布线后设计。
*.ncd 根据所选器件由ngd文件映射后生成的使用CLB和IOB描述一个提供给布局布 线信息的文件。
*.pcf 物理约束文件, 约束设计的物理位置, 含有设计的时钟频率工作电压,All Location and Timing Constraints are written to a PCF during MAP。
*.pwr 功耗报告文件。
*.pad 管脚约束报告。
*.par 布局布线报告。
*.sdf 布局布线后的延时反标文件。
*.twr 映射后静态时序报告。
*.twx 布局布线后静态时序报告。
*.ucf 用户约束文件。
*.v verilog文件。 

*.vhd vhdl文件。
*.xml 为用户设置文件保存Xpower的主要设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值