收藏 分享(赏)

verilogHDL精粹.doc

上传人:kpmy5893 文档编号:8248703 上传时间:2019-06-16 格式:DOC 页数:10 大小:40.50KB
下载 相关 举报
verilogHDL精粹.doc_第1页
第1页 / 共10页
verilogHDL精粹.doc_第2页
第2页 / 共10页
verilogHDL精粹.doc_第3页
第3页 / 共10页
verilogHDL精粹.doc_第4页
第4页 / 共10页
verilogHDL精粹.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、verilogHDL精粹 2006-12-12 20:01:00 | By: 夏虫 0推 荐针对 C语言编程者的 Verilog开发指南实例本文举例说明了如何用软件实现脉宽调制(PWM),如何将该设计转换成一个可以在 FPGA中运行的逻辑块,并能利用存储器映射 I/O接口通过软件完成对该逻辑块的控制。通过理解本文讨论的概念和内容,没有太多硬件知识的软件开发人员也能掌握在 FPGA上开发硬件的技能。 在不远的将来,嵌入式系统设计师将能够根据哪个更有利于解决设计问题来自由选择硬件和软件方案。但直到现在,对于那些想学习硬件设计的软件工程师来说不少障碍仍然很难逾越。由于硬件描述语言和编程语言非常相似,

2、因此最终这些障碍会消失。另外,市场上已有好几种低成本的演示板,上面包含现场可编程门阵列(FPGA)、微处理器以及相应工具,软件开发人员可以借此来学习硬件设计。 本文举例说明了一个使用 FPGA的新设计流程,我们从中可以知道如何用软件实现 PWM,然后如何将该设计转换成一个可以在 FPGA中运行的逻辑块,并能利用存储器映射 I/O接口通过软件完成对该逻辑块的控制。 软硬件划分 现在的情况与以前有所不同,软件工程师能够方便地参与到硬件设计中。不管是硬件模块还是软件模块现在都可以用编程语言进行设计。众所周知,C 语言是嵌入式软件设计的通用语言。在硬件设计方面,Verilog 则是流行的选择(用VHD

3、L的人也很多)。Verilog 的语法和结构与 C编程语言非常相似,从本文的例子中也可以看到这一点。 同时,硬件的升级和修改也变得越来越方便。以前可以通过下载新的可执行映像文件升级软件,但对硬件却行不通。现在情况不同了。就像软件开发人员能够快速编辑、重新编译、然后将新代码下载到存储器那样,使用可编程逻辑器件的硬件设计者也能做类似的事情。可编程逻辑改变了嵌入式系统的设计方法,设计者可以像修改软件那样方便地修改硬件。换句话说,在设计和调试阶段,设计者能够灵活选择软件方式或硬件方式来作为完成任务的最佳方式。 设计者无需太多的硬件知识就可以利用 FPGA供应商提供的工具轻松地开发出可编程逻辑嵌入式系统

4、。例如,Altera 公司的 SOPC Builder能帮助系统设计师从已有的库中选择和配置外围电路,并增加用来创建和连接外围电路的用户逻辑。加上一些可编程逻辑和硬件知识,软件工程师就能够充分利用硬件的优势改进他们的系统。 PWM软件 PWM控制器会产生一连串脉冲。通常需要规定脉冲的周期和宽度。占空比被定义为脉冲宽度与周期的比值。PWM 有着广泛的应用,大多数情况下用于控制模拟电路。因为数字信号连续变化的速率相对较快(当然取决于信号周期),因此最终会形成一个用来控制模拟设备的平均电压值。当 PWM脉冲流应用于马达时,马达的转速就能正比于占空比(从 0%到 100%)。如果占空比增加,马达转速就

5、会提高,反之,如果占空比减小,马达的转速随之也会降低。 用软件编写这样一个 PWM控制器是相对比较容易的任务,但它有助于我们简明扼要地描述如何用 Verilog设计硬件。清单 1给出了 PWM的 C代码。 清单 1:完全用软件实现的位脉冲 PWM控制器。 void pwmTask(uint32_t pulse_width, uint32_t period) uint32_t time_on=pulse_width; uint32_t time_off=period-pulse_width; while (1) pwm_output=1; sleep(time_on); pwm_output=0

6、; sleep(time_off); 根据脉宽(pulse_width)和周期(period)参数值,计算出输出为高电平和低电平的时间。接下来将输出引脚置为高电平,并等待 time_on设定的时间值之后,将输出变为低电平,并等待 time_off参数设定的时间值。下个周期再重复这样的过程,并无限循环下去。 Verilog模块 清单 2给出了一个简单的 Verilog模块,实现带异步复位功能的 8位宽寄存器。寄存器的输入“in”在时钟的上升沿被赋值到输出“out”,直到 clr_n复位信号的下降沿到来(此时输出将被赋值为 0)。 清单 2:实现带异步复位功能 8位宽寄存器的 Verilog编写模

7、块。 module simple_register(in, out, clr_n, clk, a); /端口声明 input input input 7:0 input output 7:0 clr_n; clk; in; a; out; /信号声明 reg 7:0 wire out; a; /实现带异步清除的寄存器 always (posedge clk or negedge clr_n) begin if (clr_n=0) / could also be written if (!clr_n) out=period-1) counter=pulse_width) off period写入

8、数据会设置或改变 period值,向 pLED-pulse_width写入数据将改变占空比,并导致 LED的亮度增加或减少。如果使用的是闪烁型LED,只需把周期变长,让肉眼清晰辨别开和关的周期即可。 清单 3所示的 Verilog PWM实现在本例中是作为 Altera的 Nios处理器系统的外围电路进行测试的,可以利用前文所述的 C结构通过软件对它访问。Altera的 SOPC Builder创建了宏,可以使 ModelSim(明导资讯公司的一个硬件仿真器)中的协同仿真。在系统执行 C代码时可以利用 ModelSim仿真器观察到 PWM信号以及其它系统信号的行为。 清单 4给出了用于产生图

9、1所示 PWM波形的 C代码。C 代码向 PWM寄存器写入数据,创建出周期为 5个时钟周期、脉宽为 4个时钟周期的 PWM输出信号。请注意在波形的开始处,由于 period和 pulse_width寄存器都被写入了数据,cs和 wr_n信号被证实了二次(在写 period寄存器时地址信号为低电平,在写pulse_width寄存器时地址信号变成了高电平)。 清单 4:用于产生图 1所示 PWM波形的测试软件。 void main(void) PWM * const pLED=. pLED-period=5; pLED-pulse_width=4; asm(“nop“); asm(“nop“);

10、asm(“nop“); pLED-pulse_width=2; 在寄存器中写入新值后,pwm_output 信号开始反映出变化。然后,只加入一些时延我们再看输出,一些 NOP指令被 C代码执行了。最终,脉宽变为 2个周期,PWM波形相应也有了变化,但周期仍保持为 5个时钟周期。 设计嵌入式系统架构时最好将系统分成硬件和软件二大模块,以便充分利用各自的优势。随着开发工具的不断发展,软件和硬件模块的相互交换也变得越来越透明。 一旦充分理解了本文讨论的概念和内容,也就掌握了在 FPGA上开发硬件的技能。FPGA能被用作微处理器系统中的一个存储器映射式外围电路,可以通过简单的编程实现接口。由于用硬件实现算法的速度快得多,将算法从软件转换成硬件可以极大地提高系统性能。这就是人们常说的硬件加速,掌握这一技术是熟练使用可编程逻辑器件中被有效实现的可配置处理器的关键。从长远来看,即使是软件工程师也能通过硬件加速提高系统性能和效率。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报