C程序的VerilogHDL实现AET

近年来,电子系统的模块化设计思想越来越成熟,在一些实际的电子系统设计过程中,通常将整个系统分成软件和硬件两个系统分别进行设计,然后再进行整合,而一些比较成熟的综合开发工具使得软件和硬件的设计流程更加统一。在硬件设计过程中主要使用可编程逻辑器件(PLD),形成电路网表结构,实现具体的逻辑,这样的配置可以实现用于软件用途的硬件[1]。

但是,软件设计的思想和硬件设计的思想是截然不同的。软件设计过程中首先是通过具体的算法描述实际的问题,再通过一些具体的编程语言去编写程序,然后通过相应的编译器编译连接,生成机器可以识别的二进制代码,最后这些代码在具体的微处理器上执行[2]。而对于硬件的设计则是通过一些比较成熟的综合工具将HDL编写的代码综合成实际的电路网表结构,最终形成具体的电路结构。图1和图2分别表示了两者设计思想之间的区别。

因此,如何实现C程序和VerilogHDL之间的转化就尤为重要。下文将重点论述如何借助于有限状态机,将C程序转化为VerilogHDL,并给出了其理论依据和具体的实现步骤。

1有限状态机理论

有限状态机(FiniteStateMachine,FSM)是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型,状态机用来描述发生有先后顺序或者有逻辑规律的事情。状态机是对一些具有逻辑顺序或具有时序规律的事件进行描述的一种方法。

利用有限状态机进行设计有以下几个优点:综合器易于进行优化;较容易构成性能良好的时序逻辑模块;整个结构模式简单,层次分明,易读易懂,而且容易进行排错;运行模式类似于CPU的运行模式,可以进行顺序控制;系统的可靠性高,运行状态稳定。

有限状态机设计的重点在于状态的划分、过程的描述方式和状态的编码方式。在状态的划分过程中要明确每个状态的输入输出和状态之间的转移条件。

有限状态机的过程描述方式可分为单过程描述、双过程描述和三过程描述。在实际的有限状态机设计时更多的是采用双过程和三过程进行描述。双过程的描述有利于综合器优化代码,也便于阅读和维护,缺点是组合逻辑的输出可能会产生毛刺[3];三过程的描述与双过程描述相比,虽然代码的结构较复杂,但是没有毛刺的输出,而且有利于综合;单过程的描述会使得代码相对比较冗长,难以修改和调试,不利于代码的长期性维护,不利于附加约束,优化综合效果差,会导致逻辑速度变慢,资源消耗增多,一般情况下不采用这种过程描述方式[4-5]。

通常对于FPGA器件来说,采用一位热码编码可以有效提高电路的速度和可靠性,也有利于提高器件资源的利用率。在实际的设计过程中,更多的是采用One-Hot编码方式进行编码[6]。

2理论依据和具体实现步骤

C语言作为一种面向过程的程序设计语言,在程序设计的过程中首先要分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步地实现,在使用时逐步去调用这些函数,从而解决这些问题[7]。有限状态机正是将一个VerilogHDL程序中要表述的问题划分成不同的状态进行解决,通过状态的不断转换从而实现分步解决问题的目的,这与C程序的语句执行方式是相同的。因此,可以借助于有限状态机,用VerilogHDL去实现C程序。下面是将C程序转化为VerilogHDL进行描述的具体步骤:

(1)对于一个完整的C程序,先用算法流程图将其整个程序流程详细表述出来;

(2)根据程序的实际要求,将整个算法流程分成若干个状态,确定好每个状态的输入输出和状态之间的转换条件,用状态转移图描述整个算法流程图;

(3)用VerilogHDL描述其状态转移图,然后进行综合,最后进行仿真验证;

(4)在划分状态时应注意相同状态的合并,减少不必要的状态,简化程序。

可以根据下面的基本单元模块用状态转移图描述算法流程图。图3所示的顺序语句、选择语句和循环语句是构成一个C算法流程图的基本单元,图4是其基本单元的状态转移图。

3设计举例及其C程序表示

下面讲述一个利用C语言编写的、以51单片机作为微处理器实现的一个汽车尾灯控制程序,已知汽车左右两侧各有4个尾灯。要求:(1)当汽车正常行驶时所有的灯全灭;(2)刹车时所有的灯全亮;(3)左拐弯时,只有左侧四个灯闪烁;(4)右拐弯时,只有右侧的四个灯闪烁。先画出整个程序的算法流程图如图5所示,其中S1用来检测刹车信号,S2用来检测左拐弯信号,S3用来检测右拐弯信号。

如下是用伪代码表示的为51单片机编写的C程序:

#include//头文件

/*用开关S1产生刹车信号,开关S2产生左拐弯信号,开关S3产生右拐弯信号*/

sbitS1=P2^0;//开关S1按下表示产生刹车信号

sbitS2=P2^2;//开关S2按下表示产生左拐弯信号

sbitS3=P2^4;//开关S3按下表示产生右拐弯信号

voidkeyscan();//按键信号检测

voidmain()

{

while(1)//循环检测

keyscan();//不断扫描按键,检测是否有信号产生

switch(k)//判断检测到的信号类型

/*P1口的低四位表示左侧的四个灯,高四位表示右侧的四个灯,低电平点亮*/

case1:P1=0x00;break;//刹车信号,所有灯全亮

case2:P1=0xF0;break;//左拐弯信号,左侧灯闪烁

case3:P1=0x0F;break;//右拐弯信号,右侧灯闪烁

default:P1=0xFF;break;//正常行驶,所有灯全灭

}}}

4VerilogHDL描述及其仿真

下面用VerilogHDL来描述上述C程序。首先根据图5的算法流程图画出状态转移图,如图6所示。将其整个算法流程分成S0~S5共6个状态,其中S0为初始状态,检测信号的产生;S1状态用来处理刹车信号;S2、S3状态用来处理左拐弯信号;S4、S5用来处理右拐弯信号。

用VerilogHDL描述图6的状态转移图,其完整代码如下所示:

moduleex(clk,qout,a,b,c);

/*输入信号a,b,c为高电平时分别表示刹车信号,左拐弯信号和右拐弯信号*/

inputclk,a,b,c;

/*输出信号qout的低四位表示左侧的四个灯,高四位表示右侧的四个灯,其中低电平有效*/

outputreg[7:0]qout;

reg[4:0]current_state,next_state;

/*采用One-Hot编码方式进行编码*/

parameters0=5′b00000,s1=5′b00001,

s2=5′b00010,s3=5′b00100,

s4=5′b01000,s5=5′b10000;

always@(posedgeclk)

current_state<=next_state;

begin

case(current_state)

s0:beginif(a)next_state<=s1;elseif(b)

next_state<=s2;elseif(c)

next_state<=s4;

end

s1:next_state<=s0;s2:next_state<=s3;

s3:next_state<=s0;s4:next_state<=s5;

s5:next_state<=s0;default:next_state<=s0;

endcase

always@(current_state)

s0:qout<=8′b11111111;

s1:qout<=8′b00000000;

s2:qout<=8′b11110000;

s3:qout<=8′b11111111;

s4:qout<=8′b11111111;

s5:qout<=8′b00001111;

default:qout<=8′bzzzzzzzz;

endmodule

图7为波形仿真图,从图中可以看出:(1)当a为高电平时,产生刹车信号,qout信号在S1状态输出低电平;(2)当b为高电平时,产生左拐弯信号,qout信号的低4位在S2、S3状态分别输出低电平和高电平,产生闪烁信号;(3)当c为高电平时,产生右拐弯信号,qout信号的高4位在S4、S5状态分别输出低电平和高电平,产生闪烁信号;(4)从(1)~(3)可以看出其仿真结果是正确的,符合程序的基本要求,文中的方法是可行的;(5)用三过程进行描述时,无毛刺的输出,而且容易进行综合,采用One-Hot编码方式可以提高电路的速度和可靠性,同时也可以提高器件资源的利用率。

5结论

通过上文的表述,借助于有限状态机,可以参考文中的方法实现用VerilogHDL描述C程序,从而可以通过实际的电路结构来实现软件程序的功能,这种方法也可以实现VerilogHDL程序和C程序之间的相互转换。同时,文中也归纳出在利用有限状态机进行设计时应该遵循的原则。

参考文献

[1]杨海钢,孙嘉斌,王慰.FPGA器件设计技术发展综述[J].电子与信息学报,2010,32(3):714-723.

[2]范华,秦茂玲,张俊.透视C程序设计语言[J].计算机技术与发展,2008,16(6):64-66.

[3]王春旭,周晓平,王黎黎.基于FPGA的VerilogHDL语言设计优化[J].电子元器件应用,2009,10(11):45-47.

[4]魏芳,刘志军,王立华.基于VerilogHDL的可综合有限状态机设计[J].电子工程师,2006,32(6):8-10.

[5]刘小平,何云斌,董怀国.基于VerilogHDL的有限状态机设计与描述[J].计算机工程与设计,2008,29(4):958-960.

[6]龚书涛,吕国强,彭良清.在FPGA中状态机的编码方式[J].电子工程师,2005,31(11):51-52.

[7]丁亚涛.C语言程序设计(第二版)[M].北京:高等教育出版社,2006.

THE END
1.算法流程图举例课件算法流程图举例_课件 2.执行如图所示的流程图,则输出S=_5_0__5_0__.开始S←1I←2 I←I+1S←S+I I≤100 Y N 输出S 结束 3.下图所示的流程图的输出结果为2_5__6_.开始p←0 i←1 p←p+i i←i+2 i>31 N Y 输出p 结束 4.下图所示的流程图的输出结果为_5_5__.开始x←1,https://wenku.baidu.com/view/0b57dfa1925f804d2b160b4e767f5acfa0c7834e.html
2.流程图表示举例算法与程序topdisc算法代码资源二分查找算法流程图流程图举例 浏览:59 5星 · 资源好评率100% ###流程图实例解析 假设我们有一个已经排序好的整型数组A[0..9] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19},目标值为11。下面是二分查找的具体步骤: ### 步骤一:初始化 - 设置左指针L=0,右指针R=9。 - 计算中间 Chttps://download.csdn.net/download/weixin_42183486/17270396
3.一文搞懂什么是粒子群优化算法(ParticleSwarmOptimization,PSO算法流程图和伪代码 1.2.2 应用举例 上面看不懂? 没关系,看了这个实例,保证你能理解最简单的PSO是如何实现的。 注意对于越界的位置,需要进行合法性调整,将超出定义范围的数值改成范围内的边界值。 1.3 粒子群优化算法的改进研究 粒子群优化算法的研究内容和改进方向 https://cloud.tencent.com/developer/article/2153640
4.高中数学单元教学设计(精选5篇)对生活中的实际问题通过对解决具体问题过程与步骤的分析(喝茶,如二元一次方程组求解问题),体会算法的思想,了解算法的含义,能用自然语言描述算法。 2.算法的流程图教学过程分析 对生活中的实际问题通过模仿、操作、探索,经历通过设计流程图表达解决问题的过程,了解算法和程序语言的区别;在具体问题的解决过程中,理解流程https://www.ruiwen.com/jiaoxuesheji/8242675.html
5.流程图的画法分享,简单画流程图流程图的绘制可用于梳理出事件流程的先后顺序,或呈现算法流程的具体思路,将繁杂的流程事件与算法思路简单化。 然而流程图的分类有很多,包括业务、程序、工作、工艺、算法等诸多分类。对于不同事件类型,所采取的图形符号可能存在差异,但在流程图画法上却相差无几。下面跟随迅哥了解一下流程图的画法,简单https://m.liuchengtu.com/tutorial/huafa.html
6.算法流程图及ASM图算法流程图及ASM图160;160;160; 引例160; 设计一个逻辑电路,其输入信号Xxn1xn2x0,Z为输出信号,表示X中包含的1的个数。电路可用如下的流程图描述:160;160;图521160;160;160; 含1统计电路160https://www.renrendoc.com/paper/191482200.html
7.用流程图描述算法1.理解算法的含义,能从生活中准确举例说明使用算法的例子 2.了解算法的表示形式:自然语言、流程图 3.掌握流程图描述算法的方法 过程与方法: 1.培养学生分析、解决问题的能力 2.会用流程图描述算法、解决问题 情感态度与价值观: 1培养学生的逻辑思维能力 https://www.jianshu.com/p/d3088d0ffc55
8.支持向量机算法的应用举例支持向量机算法流程图支持向量机算法的应用举例 支持向量机算法流程图 一、SVM与KNN的区别 支持向量机(support vector machines, SVM)也是一种分类模型,与KNN类似,两者都是比较经典的机器学习分类算法,KNN是通过选取目标点的临近值判断目标点的值,而SVM则是通过划分区域,从而判断目标点属于哪部分。示意图如下图1,图2所示:https://blog.51cto.com/u_16099265/10209400
9.算法思维导图模板算法 收藏 立即使用 面试重点 收藏 立即使用 工作技术栈 zpyueniao 职业:暂无 去主页      评论 0 条评论 下一页 为你推荐 查看更多? WeChat 算法-佛洛依德 奖励算法 Dijkstra算法 实用算法流程图 算法模型 算法流程 图算法 预测算法流程图 控制算法 图形https://www.processon.com/view/5f8038c7e401fd06fd7d50a5
10.流程类测试设计:路径分析法测试架构师修炼之道(8)需要特别指出的是,我们要想通过图论中的“三个等式”和“算法”来确定流程中的最小线性无关路径,流程需要遵循如下约定。 约定1:“流程图”的“入口”和“出口”不作为边数计算,如图4-53所示。 约定2:一个“流程图”只有一个“入口点”和一个“出口点”。 http://www.51testing.com/html/86/n-3712486-2.html
11.算法教学中的思考(精选十篇)例如高一年上册数学科中已经学习了简单的算法和流程图,通用技术学习了“电子控制技术”“简易机器人制作”,初中物理学习了各种电路的基本知识,基于项目式的VB学习,是在构建这些知识的基础上,依托电子控制、简易机器人实验室与网络平台的教学,将计算机编程与其他学科整合,体现知识的综合性,极大的调动了学生的学习积极性https://www.360wenmi.com/f/cnkeyi2rg0gf.html
12.使用流程图表示算法(计算机基础)流程图是表示算法也是表示业务逻辑的一种方式使用图形表示算法的方式是一种极好的方法。 下图是流程图预定义的符号: 下面是流程图示例(既表示业务逻辑也表示程序逻辑): 绘制流程图直接使用word文档就行流程图绘制方式: 1.点击插入-->形状-->流程图,图片示例如下: 通过这些形状以及我们提供的流程图示例,就可以进行https://www.pianshen.com/article/81431148068/
13.算法和流程图(及NS流程图).pdf算法和流程图(及N-S流程图).pdf 4页VIP内容提供方:HenleyChow 大小:362.49 KB 字数:约5.62千字 发布时间:2022-09-11发布于中国 浏览人气:69 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)算法和流程图(及N-S流程图).pdf 关闭预览 想预览更多内容,点击免费在线https://m.book118.com/html/2022/0906/6123133133004233.shtm
14.流程图算法可以由哪三种结构通过组合表达出来?一个哥哥要迎迎问哒请输出如下图所示的由n行*组成的图形用流程图表示该算法 有没有不是顺序结构的算法流程图(有没有算法流程图的一部分仅是条件顺序或循环顺序但不是顺序结构的) 循环结构描述算法,在画出流程图之前需要确定的三件事:1、确定循环变量和(),2、确定(),3、确定() 特别推荐 热点考点 2022年高考真题试卷汇总 https://www.zybang.com/question/5887b80b16278b59eab4e2ff502f747f.html
15.使用流程图表示算法sxkl流程图表示算法,直观形象,易于理解。 1、常用流程图说明: 2、三种基本结构和改进的流程图 顺序结构: 选择结构: 循环结构: 三种基本结构的共同特点: 只有一个入口; 只有一个出口; 结构内的每一部分都有机会被执行到; 结构内不存在“死循环”。 3、制作流程图步骤 https://www.cnblogs.com/kongd/p/9657219.html
16.NSGANSGA-Ⅱ算法流程图 基于NSGA-Ⅱ算法的多目标优化流程图 蜿蜒模式下的效率-速度关系 蜿蜒模式、混合模式(k=31.4)以及推进器模式(k=31.4)的效率-速度关系 蜿蜒模式、混合模式(k=25)以及推进器模式(k=25)的效率-速度关系 蜿蜒模式、混合模式(k=20)以及推进器模式(k=20)的效率-速度关系 https://robot.sia.cn/cn/supplement/5b835983-ab1d-4198-98fc-aa015e56abab
17.遗传算法进化流程图基于Q学习算法和遗传算法的动态环境路径规划 . 本文全文图片 动态路径规划整体框图 遗传算法进化流程图 移动机器人方位角 静态障碍物环境 红外线传感器 超声波传感器 栅格化后的环境 栅格编号 规划后路径 整体路径 移动机器人避障轨迹 避障过程中移动机器人与小车距离https://journal.bjut.edu.cn/bjgydxxb/cn/supplement/76bd6bf5-bc70-4c83-9ad5-7d53a41769c5
18.用NS流程图表示算法在编程和算法设计中,流程图是一种非常重要的工具,它能帮助我们清晰地理解和表示算法的执行流程。其中,N-S流程图(Nassi-Shneiderman图)是一种特殊类型的流程图,由以色列科学家Ike Nassi和Ben Shneiderman在1973年提出。N-S流程图的特点是可以完全去掉带箭头的流程线,算法的所有步骤都写在一个大框图(也称为流程框)https://developer.aliyun.com/article/1489730
19.设计算法.输入正整数n.计算它的阶乘n!.画出流程图.用for语句描述解:算法流程图如答图所示: 用for语句描述算法如下: 输入n; T:=1; for i:=1 to n do begin T:=T*i; end. 输出T. 练习册系列答案 创新教程系列答案 互动中考复习大讲义系列答案 中考阶段总复习ABC系列答案 达优测试卷系列答案 剑指中考系列答案 http://www.1010jiajiao.com/gzsx/shiti_id_77d21cec7625a12d71db452d984156ef