数字电路规划工程师一般都学习过编程言语、数字逻辑根底、各种EDA软件东西的运用。就编程言语而言,国内外大多数校园都以C言语为规范,只要少部分校园运用Pascal 和Fortran。
算法的描绘和验证常用C言语来做。例如要规划Reed-Solomen编码/解码器,能够分为下面几个进程。
- 先深化了解Reed-Solomen编码/解码的算法。
- 编写C言语的程序来验证算法的正确性。
- 运转描绘编码器的C言语程序,把在数据文件中的多组待编码的数据转化为相应的编码后数据,并存入文件。
- 编写一个加搅扰用的C言语程序,用于模仿信道。它能发生随机误码位(并把误码位个数操控在纠错才干范围内),将其参加编码后的数据文件中。运转该加搅扰程序,发生带误码位的编码后的数据文件。
- 编写一个解码器的C言语程序,运转该程序把带误码位的编码文件解码为另一个数据文件。
比较原始数据文件和生成的文件,便可知道编码和解码的程序是否正确(能否主动纠正纠错才干范围内的错码位),用这种办法咱们就能够来验证算法的正确性。但这样的数据处理其运转速度只与程序的巨细和核算机的运转速度有关,也不能独立于核算机而存在。
假如要规划一个专门的电路来进行这种对速度有要求的实时数据处理,除了以上介绍的C程序外,还需编写硬件描绘言语(如Verilog HDL或 VHDL)的程序。然后进行仿真以便从电路结构上确保算法能在规矩的时刻内完结,并能与前端和后端的设备或器材正确无误地交流数据。
用硬件描绘言语(HDL)的程序规划硬件的优点在于易于了解、易于保护,调试电路速度快,有许多的易于把握的仿真、归纳和布局布线东西,还能够用C言语合作HDL来做逻辑规划的前后仿真,验证功用是否正确。
在算法硬件电路的研发进程中,核算电路的结构和芯片的工艺对运转速度有很大的影响。所以在电路结构确认之前,有必要经过屡次仿真。
- C言语的功用仿真。
- C言语的并行结构仿真。
- Verilog HDL的行为仿真。
- Verilog HDL RTL级仿真。
- 归纳后门级结构仿真。
- 布局布线后仿真。
- 电路完成验证。
下面介绍用C言语合作Verilog HDL来规划算法的硬件电路块时考虑的三个首要问题:
1.为什么挑选C言语与Verilog 合作运用
首要,C言语很灵敏,查错功用强,还能够经过PLI(编程言语接口)编写自己的体系使命直接与硬件仿真器(如Verilog-XL)结合运用。C言语是现在世界上运用最为广泛的一种编程言语,因此C程序的规划环境比Verilog HDL更完好。此外,C言语可运用于许多范畴,有牢靠的编译环境,语法齐备,缺点较少。
比较起来,Verilog 言语仅仅针对硬件描绘的,在别处运用(如用于算法表达等)并不便利。并且Verilog的仿真、归纳、查错东西等大部分软件都是商业软件,与C言语比较缺少长时刻许多的运用,牢靠性较差,亦有许多缺点。所以,只要在C言语的合作运用下,Verilog才干更好地发挥作用。
面临上述问题,最好的办法是C言语与Verilog言语相得益彰,相互合作运用。这便是既要运用C言语的完好性,又要结合Verilog对硬件描绘的精确性,来更快、更好地规划出契合功用要求的硬件电路体系。
运用C言语完善的查错和编译环境,规划者能够先规划出一个功用正确的规划单元,以此作为规划比较的规范。然后,把C程序一段一段地改写成用并型结构(相似于Verilog)描绘的C程序,此刻仍是在C的环境里,运用的依然是C言语。
假如运转成果都正确,就将C言语关键字用Verilog相应的关键字替换,进入Verilog的环境。将测验输入一起加到C与Verilog两个单元,将其输出做比较。这样很简单发现问题的地点,更正后再做测验,直至正确无误。
2.C言语与Verilog言语相互转化中存在的问题
混合言语规划流程往往会在两种言语的转化中会遇到许多难题,如下所示。
- 怎样把C程序转化成相似Verilog结构的C程序。
- 怎么添加并行度,以确保用硬件完成时运转速度到达规划要求。
- 怎样不运用C中较笼统的语法(例如迭代、指针、不确认次数的循环等)。也能来表明算法(由于转化的意图是用可归纳的Verilog句子来替代C程序中的句子,而可用于归纳的Verilog语法是适当有限的,往往找不到相应的关键字来替换)。
C程序是按行顺次履行的,归于次序结构。而Verilog描绘的硬件是能够在同一时刻一起运转的,归于并行结构。这两者之间有很大的抵触。别的,Verilog的仿真软件也是次序履行的,在时刻联系上同实践的硬件是有差异的,可能会呈现一些无法发现的问题。
C言语的函数调用与Verilog中模块的调用也有差异。C程序调用函数是没有延时特性的,一个函数是专一确认的,对同一个函数的不同调用是相同的。而Verilog中对模块的不同调用是不同的,即便调用的是同一个模块,有必要用不同的姓名来指定。
Verilog的语法规矩很死,约束许多,能用的判别句子有限,仿真速度较慢,查错功用差,错误信息不完好。仿真软件一般也很贵重,并且不一定牢靠。C言语的把戏则许多,转化进程中会遇到一些困难。
C言语没有时刻联系,转化后的Verilog程序有必要要能做到没有任何外加的人工延时信号,否则将无法运用归纳东西把Verilog源代码转化为门级逻辑。
3.怎么运用C言语来加速硬件的规划和查错
如表1所示为常用的C言语与Verilog相对应的关键字与操控结构。
表1 C言语与Verilog相对应的关键字与操控结构表
C |
Verilog |
sub-function |
module、function、task |
if-then-else |
if-then-else |
case |
case |
{,} |
begin、end |
for |
for |
while |
while |
break |
disable |
define |
define |
int |
int |
printf |
monitor、display、strobe |
如表2所示为C言语与Verilog相对应的运算符。
表2 C言语与Verilog对应运算符表
C |
Verilog |
功 能 |
* |
* |
乘 |
/ |
/ |
除 |
+ |
+ |
加 |
– |
– |
减 |
% |
% |
取模 |
! |
! |
反逻辑 |
|
|
逻辑与 |
|| |
|| |
逻辑或 |
> |
> |
大于 |
|
|
小于 |
续表
C |
Verilog |
功 能 |
>= |
>= |
大于等于 |
= |
= |
小于等于 |
== |
== |
等于 |
!= |
!= |
不等于 |
~ |
~ |
位反相 |
|
|
按位逻辑与 |
| |
| |
按位逻辑或 |
^ |
^ |
按位逻辑异或 |
~^ |
~^ |
按位逻辑同或 |
>> |
>> |
右移 |
|
|
左移 |
?: |
?: |
适当于if-else |
从上面的解说咱们能够总结如下。
- C言语与Verilog硬件描绘言语能够合作运用,辅助规划硬件。
- C言语与Verilog硬件描绘言语很像,但要稍加约束。
- C言语的程序很简单转成Verilog的程序。