综述
在写一个自动售货机状态机并仿真,上板的过程中遇到了各种问题。在解决这些零碎的问题后,在防止自己忘记这些经验以及用电子介质取代纸质记录的目的下,写下此文。
这些零碎的经验主要分VeilogHDl语法积累及状态机编写总结,Vivado2018.1软件使用积累,一些规范与约定等方面。
VeilogHDL语法积累&状态机编写总结
1. 阻塞与非阻塞:
(1)代码角度体会
// block
reg a=0;
reg b=1;
reg c;
always
begin
a=b;
c=a;
end
//the outcome: a=1 c=1
//no-block
reg a=0;
reg b=1;
reg c;
always
begin
a<=b;
c<=a;
end
//the outcome: a=1 c=0
(2)硬件角度解释
非阻塞过程相当于两个串联的触发器:
阻塞:
2.驱动源 :
在两个always块中对同一reg型变量赋值,转化为硬件电路即该reg变量有两个驱动源。这种写法在编译及仿真时不会报错,但在综合及实现时会报错。
3状态图及状态机:
从我已知的FPGA入门教材看来,状态机是基本功一类的存在。基本功等于及其重要、基础,写复杂的时序电路少不了它。
于是入门重点不可避免的落在状态机上:
(1)自动售货机的FSM
编写一个状态机,首先是要从已知有时序的逻辑功能中抽象出状态、条件两个最重要的基本要素,根据他们的关系画出状态图。具体为:1,抽象出状态,2,找出状态转移条件,3,画出状态图。
设计一个自动饮料售卖机,饮料10分钱,硬币5分10分两种,并考虑找零。
分析自动售货机可能的状态:1,未投币;2,被投5分等待下一次投币;3,被投10分。
看似有三个状态&#