打印
[FPGA]

新人求助schematic 综合的一点问题

[复制链接]
640|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 pszcmzcm 于 2015-6-29 12:40 编辑

新人求助schematic 综合的一点问题
在综合后 technology schematic中 有数个LUT(如图所示)感觉没有意义属于资源浪费


EDA为ISE14.7


truetable为
input  output
0        0
1        1

考虑了一下应该是VHDL编写上的问题,大学中虽然涉及了FPGA 也 在Tutorial 中 学了基本的VHDL编写,但对于此类问题还是感觉无从下手,现在自学并为Msc准备中,希望大牛能告知一下解决方法和原理

code为简单的双向交通灯(FSM based)
具体如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Traffic_light is

port(clk:in std_logic;
          Test: in std_logic;
          Standby:in std_logic;
          R1,Y1,G1:out std_logic;
          R2,Y2,G2:out std_logic);
                  
end Traffic_light;

architecture Behavioral of Traffic_light is


constant time_max  :integer := 2700;
--The frequency of Clk is 60Hz--
constant time_RG   :integer := 1800;  
--time of light change from red & green(s)--
constant time_RY   :integer := 300;
--time of light change from red & yellow(s)--
constant time_GR   :integer := 2700;
--time of light change from green & red(s)--
constant time_YR   :integer := 300;
--time of light change from yellow & red(s)--
constant time_test :integer := 60;
--time for test mode(s)--

type state is (state_RY,state_GR,state_YR,state_RG,state_YY);
signal Pr_state,Nx_state: state;
signal time: integer range 0 to time_max;

begin
--lower section of state machine--
process(clk,standby)
        variable count: integer range 0 to time_max;
        begin
        if (standby = '1') then
                Pr_state <= state_yy;
        elsif (clk'event and clk= '1') then
                count := count +1;
                if (count = time ) then
                Pr_state <= Nx_state;
                count := 0;
                end if;
        end if;
end process;

--upper section of state machine--
process(pr_state,test)
        begin
        case pr_state is
        --state_RY--
        when state_RY =>
        R1 <= '1'; G1 <= '0'; Y1 <= '0';
        R2 <= '0'; G2 <= '0'; Y2 <= '1';
        Nx_state <= state_GR;
        if (test = '0') then time <= time_RY;
        else time <= time_test;
        end if;
        --state_GR--
        when state_GR =>
        R1 <= '0'; G1 <= '1'; Y1 <= '0';
        R2 <= '1'; G2 <= '0'; Y2 <= '0';
        Nx_state <= state_YR;
        if (test = '0') then time <= time_GR;
        else time <= time_test;
        end if;
        --state_YR--
        when state_YR =>
        R1 <= '0'; G1 <= '0'; Y1 <= '1';
        R2 <= '1'; G2 <= '0'; Y2 <= '0';
        Nx_state <= state_RG;
        if (test = '0') then time <= time_YR;
        else time <= time_test;
        end if;
        --state_RG--
        when state_RG =>
        R1 <= '1'; G1 <= '0'; Y1 <= '0';
        R2 <= '0'; G2 <= '1'; Y2 <= '0';
        Nx_state <= state_RY;
        if (test = '0') then time <= time_RG;
        else time <= time_test;
        end if;
        when others =>
        R1 <= '0'; G1 <= '0'; Y1 <= '1';
        R2 <= '0'; G2 <= '0'; Y2 <= '1';
        Nx_state <= state_RY;
        end case;
end process;
end Behavioral;

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝