摘 要:随着科技的飞速发展,传统的电子技术逐渐被现代电子技术取代,以FPGA/CPLD为硬件,以verilog语言为软件的EDA技术应用越来越广泛,本文旨在以一个具体的序列检测器的设计为例,将以硬件描述语言来设计芯片的流程呈现给大家。
关键词:verilog;序列检测器;状态;EDA
中图分类号:TP273 文献标识码:A
1 引言(Introduction)
在数字信号的传输和数字系统产品的设计和测试过程中,往往需要用到一组特定的串行数字信号,我们把产生序列信号的模块电路称作序列信号发生器,如要求产生一串序列“10001110”为例来给大家展示EDA设计有限状态机的过程[1]。本电路由计数器与数据选择器两部分构成,结构框图如图1所示,该锁存输出的功能是为了消除电路产生的毛刺。
图1 结构框图
Fig.1 Structure diagram
2 序列检测器的基本工作过程(The basic working
process serial detector)
有限状态机一般用来检测一组或多组由二进制码组成的脉冲序列信号,广泛应用于在数字系统中。当该特定序列检测器连续接收到一组二进制码,如果这组二进制码与检测器中预先设置的码能匹配成功,就输出1,否则输出0。因为该检测的关键在必须连续接受正确码,中间只要出错以为,就必须重新进行检测,所以要求该检测器记住前一次的正确码及正确序列,直到在连续的检测中所有的串行二进制码都能连续匹配成功。检测二进制码中,只要有任何一位没匹配成功都回到初始状态重新开始匹配[2]。方框图如图2所示。
图2 状态流程图
Fig.2 State flow diagram
3 状态机的基本设计思想(The basic design idea of
state machine)
在数字系统中,当状态连续变化,我们可以采用状态机的设计思想来提高设计效率,还可以增加程序的可读性,从而降低错误的概率。而有限状态机的设计思路也是数字系统中一种常用的设计方法之一。通常情况,有限的标准状态机分为以下两种,摩尔机和米立机。两者不同在于,摩尔机中,它输出只是当前状态值的函数,而且只在时钟上跳沿时发生作用。而米立机的输出是当前输入值、当前输出值、当前状态值三者共同的函数。本例从一串二进制数码中检测出一个已预置的8位二进制码“10001110”,每当增加一位二进制码相当于增加一个状态,连同初始态,总共需要用9个状态来实现[3]。状态转换过程如图3所示。
图3 状态转换图
Fig.3 State transition diagram
注意:此图仅作为参考,检测不同的二进制码其过程不同!
4 设计过程(Design process)
4.1 硬件设备连接
(1)将EDA适配板JTAG接口用十芯排线和万用下载区的SOPC JTAG口连接起来,万用下载区的电源开关选择到SOPC下载的一边。
(2)将开发板上按要求设置好相关跳线。
(3)对EDA开发板供电。
4.2 软件实现
(1)打开Quartus II软件,由于在计算机软硬件领域,一般的设计都是一项工程(Project),因此需要为工程建立一个放置此工程相关文件的文件夹,该文件夹作为EDA工程的工作目录。创建一个工程,命名并保存到上述文件夹中。
(2)新建一个verilog代码文件,主要模块代码如下:
always @ (posedge clk4 or posedge rst)
if (rst) begin key1_dff1<=1'b0;key1_dff2<= 1'b0;
key2_dff1<=1'b0; key2_dff2<=1'b0;end else begin
key1_dff1<=key1; key1_dff2<=key1_dff1;
key2_dff1<=key2; key2_dff2<=key2_dff1;end
assign value_0=key1_dff1 & !key1_dff2;//serial value is 0;
assign value_1=key2_dff1 & !key2_dff2;//serial value is 1;
(3)将设计文件加入工程。
(4)选择目标芯片。
(5)选择配置器件的工作方式。
(6)选择配置器件和编程方式。
(7)选择输出设置。
(8)选择目标芯片的闲置引脚的状态。
(9)编译。
(10)仿真。
(11)应用RTL电路图观察器。
(12)引脚锁定。
引脚分配如下:管脚标号led0到led7分别接到LED流水灯的8位输入端上,key1和key2接按键的输入口,buzzer接led灯。100脚接rst使系统复位。管脚标号对应的I/O如下所示:
User Assignments Node Name
set_location_assignment PIN_79 -to led[0] set_location_assignment PIN_82 -to led[1]set_location_assignment PIN_83 -to led[2]
set_location_assignment PIN_84 -to led[3] set_location_assignment PIN_85 -to led[4] set_location_assignment PIN_91 -to led[5]
set_location_assignment PIN_94 -to led[6] set_location_assignment PIN_96 -to led[7] set_location_assignment PIN_100 -to rst
set_location_assignment PIN_99 -to key1 set_location_assignment PIN_98 -to key2 set_location_assignment PIN_41 -to clk4
set_location_assignment PIN_97 -to buzzer
5 结论(Conclusion)
经过以上软硬件设计,基本达到设计目标,能够实现检测“110”序列,当检测到该序列后点亮EDA开发板上对应的LED灯。需要注意的是,时钟频率不要选择太高,可以选择几百赫兹的频率。
参考文献(References)
[1] 韩芝侠.基于EDA技术的复杂数字电路设计[J].宝鸡文理学院学报(自然科学版),2013(01):35-38.
[2] 周小仨.EDA技术在数字电子技术实验中的应用[J].电子制作,2014(15):27-28.
[3] 李洪奇.可编程序列脉冲检测器的设计[J].聊城大学学报(自然科学版),2003(02):72-74.