初学者求助。根据原理图编写VHDL语言

2019-07-18 13:31发布

初学Quartus 2不久。根据这个原理图来写程序,单进程和双进程的。我写的程序似乎有错,可是不知道错在哪里,改了好多天了,仿真还是有错啊~还是搞不掂。唯有向各位请教了。帮我看看我的程序哪里有错,怎么改,谢谢了!


这个是原理图 这个是原理图
这是双进程的 这是双进程的
这是单进程的 这是单进程的
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
chen499103
1楼-- · 2019-07-18 19:10
单进程的case语句有错,将WHEN至END IF中的ST换成NST,既次态!
chen499103
2楼-- · 2019-07-18 21:24
至于双进程的吗,请参考以下程序(我们课本上的)

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY s_machine IS
  PORT ( clk,reset    : IN STD_LOGIC;
          state_inputs : IN STD_LOGIC_VECTOR (0 TO 1);
          comb_outputs : OUT INTEGER RANGE 0 TO 15 );
END s_machine;
ARCHITECTURE behv OF s_machine IS
  TYPE FSM_ST IS (s0, s1, s2, s3);  --数据类型定义,状态符号化
  SIGNAL current_state, next_state: FSM_ST;--将现态和次态定义为新的数据类型
BEGIN
REG: PROCESS (reset,clk)                  --主控时序进程

BEGIN
    IF reset = '1' THEN   current_state <= s0;--检测异步复位信号
    ELSIF clk='1' AND clk'EVENT THEN   
      current_state <= next_state;
    END IF;
  END PROCESS;     
COM:PROCESS(current_state, state_Inputs)     --主控组合进程
  BEGIN
    CASE current_state IS                     
      WHEN s0 => comb_outputs<= 5;     
        IF state_inputs = "00" THEN  next_state<=s0;                       
           ELSE  next_state<=s1;   
        END IF;
      WHEN s1 =>  comb_outputs<= 8;
        IF state_inputs = "00" THEN  next_state<=s1;   
        ELSE  next_state<=s2;   
        END IF;
      WHEN s2 =>   comb_outputs<= 12;  
        IF state_inputs = "11" THEN  next_state <= s0;
        ELSE  next_state <= s3;
        END IF;
      WHEN s3 =>  comb_outputs <= 14;
        IF state_inputs = "11" THEN  next_state <= s3;
        ELSE  next_state <= s0;   
        END IF;
    END case;
  END PROCESS;      
END behv;
chen499103
3楼-- · 2019-07-19 02:58
还有在仿真时,设置的时针频率有合适,太高了不行!
meal8
4楼-- · 2019-07-19 07:24
chen499103 发表于 2013-5-22 18:31
单进程的case语句有错,将WHEN至END IF中的ST换成NST,既次态!

还是不行啊。似乎怎样改状态图都有问题,可是仿真却是没问题的!

NST没有读取...

NST没有读取...

状态图好像也错了

状态图好像也错了
meal8
5楼-- · 2019-07-19 12:14
chen499103 发表于 2013-5-22 18:34
至于双进程的吗,请参考以下程序(我们课本上的)

LIBRARY IEEE;

为什么输入是“00”和“11”的?我在编译的时候改成其他的就状态图就不正确了...

一周热门 更多>