逻辑开发专题笔记

FPGA开发任务称为逻辑设计,开发过程是把用户的十位逻辑转换成数字电路逻辑,最有效的设计方法时状态机。


6.1Verilog HDL设计进阶


6.1.1面向硬件的程序设计思维

    面向硬件的程序设计思维就是指,如何将具体功能形成赢家RTL级模型,在选择具体的物理电路来实现,再用合适的语言去实现。

    

    1.程序的并行执行特点

    HDL语言代表着门电路和触发电路。任何时候上电,各个模块将同时工作。并行思维考虑算法结构。模块内部的执行顺序比较复杂。

    “begin end”之间存在阻塞赋值和非阻塞赋值两种赋值方式,为避免竞争和冒险,必须遵循两条准则:

    (1)在描述组合逻辑always块中用阻塞赋值=(2)时序逻辑always块中用非阻塞赋值<=。

    组合来哟及中阻塞赋值只与电平有关,往往和触发沿没有关系,可以看成并行执行;时序逻辑中,非阻塞赋值是并行执行的。因此begin end内部语句也是并行执行的。


    2.时钟是程序的执行控制器

    程序设计中需要串行的控制功能,比如等待某个指令到来后配置模块然后反馈输出,这就需要通过实践的精确定位来获取严格的先后关系(应该是实际中经常讲到的对时序)。

    按照时钟节拍来完成串行控制,利用一个count作为计数控制,再调用case(count)行为语句。

   

    3.程序的可综合性

    并不是所有Verilog HDL语言写的程序都是可综合的,可仿真不一定可综合。综合时候分为支持(大部分常用的),不支持(某些类型比如trireg等),和忽略三种(比如initial)。


    6.1.2面积和速度的转换原则

    面积:主要是值设计所占用的FPGA逻辑资源数目,即用消耗的触发器FF和查找表LUT来衡量。

    速度:主要指在芯片上稳定运行时候能达到的最高频率。

    面积和速度的对立统一关系,他们是一对矛盾体。一方面要提高速度就要消耗更多的资源及需要更大的面积;另一方面为了减小面积就需要降低处理速度就需要降低处理速度。所以既提高速度又要减小面积是不可能同时实现的。二者平衡二者互换。

    互换具体实现:模块复用、乒乓操作、串并变换、流水线操作。比如串并变换例子:数据速率是乘法器模块处理速度的3倍,那么忧郁乘法器模块的数据吞吐量满足不了要求,就可以利用面积换速度的思想,复制三个乘法器模块。首先将输入数据串/并转换,然后利用三个模块并行处理所分配的数据,最后将处理结果并/串转换,达到数据速率的要求。


    6.1.3同步电路设计原则

    1.同步电路与异步电路区别在于触发是否与驱动时钟同步,所有店里是否在同一时钟沿的触发下同步处理数据。

    同步复位:always@(posedge clk)   ;只有一个触发条件 ;如果来了reset信号,要等到clk上升沿才能触发;

    异步复位:always@(posedge clk or posedge reset);两个触发条件 ; 如果来了reset信号,立即触发;

    实际系统,常存在多时钟情况,这时应该使设计局部同步,即统一市中区东的电路同步于同一时钟沿,这是同步电路的理念。

    2.同步电路有点 

    (1)有效避免毛刺影响,提高可靠性;

    (2)简化时序分析过程;

    (3)减少工作环境对设计的影响,而异步电路易受到温度电压器件等影响,时序苛刻。

    3.同步电路的准则

    (1)单时钟策略。尽量使用单时钟,走全局时钟,性能最优。在多时钟应用中要做到局部时钟同步。

    (2)单时钟沿策略。posedge或negedge,尽量避免使用混合时钟沿来采样或驱动电路。混合时钟沿会使得工作频率降低,时序分析复杂。

    (3)禁止在模块内部使用计数器分频产生所需时钟。各个模块内部各自分频会导致时钟管理混乱,。


6.2 FPGA芯片底层单元的使用

    底层单元为专用硬件资源,硬核,包括全局时钟网络,DDL,DCM,内嵌块存储单元,硬核乘法器,高速收发器,嵌入式处理器等,都已经过ASIC验证。

    6.2.1 全局时钟网络

     是一种全局布线资源,保证时钟信号到达各个目标逻辑单元的延时基本相同。不同器件时钟性能数量有不同。全局时钟具有最小偏移最大扇出能力,尽量在设计中使用全局时钟,最简单最可靠。

    6.2.2 CMT时钟管理模块的使用

    Virtex5后,开始增加了PLL模块,也就是CMT包括DCM两个和PLL一个,两种底层单元,提供灵活的高性能时钟控制。

    DCM数字时钟管理模块,是基于以前使用的数字延迟锁相环DLL模块而升级的。DCM功能:消除时钟延迟,频率合成,时钟相位调整等。DCM的优点和组成(DLL,DFS,DPS,DSS)有很多理论,不一一列举。

    PLL能作用各种频率的频率综合器,并且与DCM联合使用还可以作为输入时钟的抖动滤波器。

    DCM有现成的IP核可以调用。

    6.2.3内嵌块存储器

    xilinx存储资源包括内嵌块存储器、分布式存储器、16位移位寄存器。这些资源科生成深度位宽可配置的RAM ROM FIFO 移位寄存器等存储逻辑。

    块存储器是硬件存储器不占用逻辑资源其余两种是xilinx专有的存储结构,一般来讲块存储器用于大数据量的场合,其余两类用于小数据量环境。

    块存储器RAM几乎是FPGA器件中除了逻辑资源之外用的最多的功能块,分为单端口、简单双端口、真双端口RAM等模式、ROM模式、FIFO模式(FIFO类似简单双端口,最重要特征是具有FULL和EMPTY指示信号,FULL有效就不能再写,EMPTY有效就不能再读)。

   块RAM有现成的IP核可以调用,可以封装为FIFO、移位寄存器以及延迟器。

    6.2.4硬核乘加器的使用

    乘法器两种方式:硬核乘法器实现 和 逻辑单元搭建的乘法器。

    乘加器再乘法器后面级联了加法器;乘累加器则是在乘法器后面级联了累加器,乘加器IP核使用 Multiply Accumulator。


6.3代码风格

    6.3.1代码风格的含义

    两层:一是Verilog代码书写习惯; 二是对于特定电路,用哪一种形式的语言描述们才能将电路描述的更准确,综合后更合理。

    6.3.2代码书写风格

    一个项目内应该有一套完整的代码编写规范作为约束,使得具有良好的可读性。

    1.信号命名规则

    如微软的匈牙利法:在变量和函数名前加入前缀法。

     (1)系统级信号的命名。rst、clk等全局信号clk_32p768MHz,系统级sys_dout,sys_din 等;

     (2)低电平有效xxxx_n

    2.模块命名规则 略

    3. 代码格式规范

    (1)分节书写格式,每节基本上完成一个功能,会有很多always,每个always是一节;

    (2)注释的规范 根据具体要求吧;细节:说明模块思路,可以有自己的想法;函数的适用方法;强调可能出错地方;注释要记录更改日期;

    (3)空格的舒勇这个比较容易忽视,但影响最小;

    (4)begin...end书写规范;begin跟在always@(.....) begin

                                                                         end与alwyas对其。

               不同层次之间用Tab来缩进,每加深一层缩进一个Tab; 在endmodule加注释说明代码块的名称。

    4.模块调用规范,应该用信号映射法 模块名 (. 端口1信号名(连接端口1信号名),

                                                                                     . 端口2信号名(连接端口2信号名));

    6.3.3通用设计代码风格

    1.逻辑复用与逻辑复制,前者通过速度换面积,后者通过面积换速度;

    2.逻辑结构,链状结构和树状结构,前者指串行执行,后者指串并结合;前者延迟较大,后者延迟较小。

    3.if和case语句的区别;if是有一定优先级的编码逻辑,case是逻辑并行的不具有优先级;前者多种表达式,后者用一个公共的表达式;if-else速度慢占用面积小,case速度快占用面积大;

    4.关机路径信号处理原则 5.避免意外锁存器 6.流水线技术使用---- 不细说了

    6.3.4xilinx专用设计代码风格  尽可能利用芯片结构及底层红单元以获取最佳综合和实现效果   -------------------不太懂,感觉偏芯片底层资源理解,具体用到再说吧。

    

    

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值