您的位置:控制工程论坛网论坛 » 教程与手册 » 可编程逻辑设计基本原则

常青树

常青树   |   当前状态:在线

总积分:1421  2025年可用积分:0

注册时间: 2008-09-28

最后登录时间: 2012-05-30

空间 发短消息加为好友

可编程逻辑设计基本原则

常青树  发表于 2008/10/28 21:24:17      587 查看 0 回复  [上一主题]  [下一主题]

手机阅读

可编程逻辑设计基本原则

1.面积和速度的平衡与互换原则
        这里“面积”是指一个设计所消耗FPGA/CPLD的逻辑资源数量;对于FPGA,可以用所消耗的触发器和查找表来衡量;对于CPLD,常用宏单元衡量。“速度”是指设计在芯片上稳定运行时所能够达到的最高频率,这个频率由设计的时序状况决定,与设计满足的时钟周期、PAD to PAD TIME、CLOCK SETUP TIME、CLOCK HOLD TIME和CLOCK-TO-OUTPUT DELAY等众多时序特征量密切相关。设计的目标应该是在满足设计时序要求的前提下,占用最小的芯片面积,或者在所规定的面积下,使设计的时序余量更大,频率更高。当两者冲突的时候,采用速度优先的准则。
        
        一个设计如果时序余量较大,所能跑的频率远远高于设计要求,那么就能通过功能模块复用减少整个设计消耗的芯片面积,这就是用速度的优势换面积的节约;反之,如果一个设计的时序要求很高,普通的方法达不到设计频率,那么一般可以通过将数据流串并转换,并行复制多个操作模块,对整个设计采取“乒乓操作”和“串并转换”的思想进行处理,在芯片输出模块处再对数据进行“并串转换”。
  
2.硬件原则
        硬件原则主要针对HDL代码编写而言。虽然Verilog在语法规则上与C语言相似,但是Verilog的本质作用在于描述硬件!对于初学者而言,片面追求代码的整洁、简短,是与评价HDL的标准背道而驰的!正确的编码方法是,首先要做到对所需实现的硬件电路“胸有成竹”,对该部分硬件的结构与连接十分清晰,然后再用适当的HDL语句表达出来即可。

       RTL级Verilog描述语法和C语言描述语法的区别举例:
1、循环
    在C语言的描述中,为了使代码执行效率高,表述简洁,经常用到下面的for语句
    for(i=0;i<16;i++)
    ...
    Verilog代码设计中,在RTL级编码中极少使用FOR循环,因为for循环会被综合器展开为所有变量情况的执行语句,每个变量独立占用寄存器资源,每条执行语句并不能有效的复用硬件逻辑资源,造成巨大的资源浪费。RTL硬件描述中,遇到类似算法,推荐的方式是先搞清楚设计的时序要求,做一个reg型计数器,在每个时钟沿累加,并在每个时钟沿判断计数器情况,做相应的处理,能复用的处理模块尽量复用,即使所有操作都不能复用,也采用case语句展开处理。如:
        reg [3:0] counter;
always @(posedge clk)
if(syn_rst)
   counter <= 4'b0;
else
   counter <= counter+1;
always @(posedge clk)
   begin
      case(counter)
          4'b0000:
          ...
          default:
      endcase
   end

  2、条件判断
    C语言中主要有if...else和switch语句,两者之间的区别主要在于程序的长短。
    Verilog中也有相应的if...else和case语句,但其描述结构就有很大的区别。if...else语句是有优先级的。一般来说第一个if的优先级最高,最后一个else优先级最低。而case语句是“平行”的结构,没有优先级。
3.系统原则
    存储器资源使用的基本原则是根据设计中用到的多少RAM或ROM,确定所选器件的嵌入式block RAM的容量,并合理配置每块RAM的深度和宽度。
    软核的使用可以简化单板的设计难点,节约了单板面积,提高了单板的可靠性。但是,目前内嵌在FPGA之中的DSP或CPU处理模块的硬件主要由一些加、乘、快速进位链、pipelining、Mux等结构组成,加上用逻辑资源和块RAM实现调度机制等硬件结构,所以还不是真正意义上的DSP或CPU。这种DSP或CPU Block比较适合应用于运算密集的FIR滤波器、编码解码、FFT(快速傅立叶变换)等操作。
    串行收发器由两部分组成:发端是串行发送单元SERializer,用高速时钟调制编码数据流;接收端为串行接收单元DESeralizer,起主要作用是从数据流中恢复出时钟信号,并解调还原数据,根据其功能,接收单元还有一个名称叫时钟数据恢复器。SERDES技术的应用很好地解决了高速系统数据传输的瓶颈,节约了单板面积,提高了系统的稳定性,是高速系统设计的强有力支撑。
    需要注意的是,选择高等级的器件和改善布线资源分配仅仅是提高芯片工作速度的辅助手段,设计速度主要由电路的整体结构、代码的Coding Style等因素决定。
    对设计整体意义上的模块复用应该在系统功能定义后就初步考虑,并对模块的划分起指导性作用。模块划分非常重要,除了关系到是否最大程度上发挥项目成员的协同设计能力,而且直接决定着设计的综合、实现效果和相关的操作时间。
1楼 0 0 回复