阅读 | 订阅
阅读 | 订阅
控制系统

可编程逻辑设计原则之硬件原则

星之球激光 来源:FPGA设计网2011-12-05 我要评论(0 )   

硬件原则主要针对HDL代码编写而言。应该明确FPGA/CPLD的逻辑设计所采用的硬件描述语言同软件语言是有本质区别的!以Verilog语言为例,虽然Verilog许多语法规则和C语言相...

硬件原则主要针对HDL代码编写而言。应该明确FPGA/CPLD的逻辑设计所采用的硬件描述语言同软件语言是有本质区别的!以Verilog语言为例,虽然Verilog许多语法规则和C语言相似,但是Verilog作为硬件描述语言,他的本质作用在于描述硬件!应该认识到Verilog是采用了C语言形式的硬件的抽象,他的最终实现结果是芯片内部的实际电路。所以评判一段HDL代码的优劣的最终标准是其描述并实现的硬件电路的性能(包括面积和速度两个方面)。评价一个设计的代码水平较高,仅仅是说这个设计由硬件向HDL代码这种表现形式转换的更流畅、合理。而一个设计的最终性能,在更大程度上取决于设计工程时所构想的硬件实现方案的效率以及合理性。

片面追求代码的整洁、简短,这是错误的,是与评价HDL的标准背道而驰的!

硬件原则的另外一个重要理解是“并行”和“串行”的概念。硬件系统比软件系统速度快、实时性高,其重要原因就是硬件系统中各个单元的运算是独立的,信号流失并行的。而C语言编译后,其机器指令在CPU的高速缓冲队列中基本是顺序执行的,即使有一些并行处理的技术,也是在一定程度上是十分有限的。所以在写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语句是“平行”的结构,没有优先级。
 

 

转载请注明出处。

暂无关键词
免责声明

① 凡本网未注明其他出处的作品,版权均属于激光制造网,未经本网授权不得转载、摘编或利用其它方式使用。获本网授权使用作品的,应在授权范围内使 用,并注明"来源:激光制造网”。违反上述声明者,本网将追究其相关责任。
② 凡本网注明其他来源的作品及图片,均转载自其它媒体,转载目的在于传递更多信息,并不代表本媒赞同其观点和对其真实性负责,版权归原作者所有,如有侵权请联系我们删除。
③ 任何单位或个人认为本网内容可能涉嫌侵犯其合法权益,请及时向本网提出书面权利通知,并提供身份证明、权属证明、具体链接(URL)及详细侵权情况证明。本网在收到上述法律文件后,将会依法尽快移除相关涉嫌侵权的内容。

网友点评
0相关评论
精彩导读