<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x
    查看: 5645|回復: 9
    打印 上一主題 下一主題

    [提問] 用VHDL語言編寫程序

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2012-11-28 13:07:13 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
    交通燈控制器
    系統設計要求:
    在十字路口,東西南北各有一組紅、黃、綠燈,其控制功能:

    1)復位狀態東西南北黃燈亮。

    (2)東西兩側紅燈亮,南北兩側綠燈亮
      (3)東西兩側紅燈亮,南北兩側黃燈亮(準備變紅燈)。


    4)東西兩側綠燈亮,南北兩側紅燈亮。

    5)東西兩側黃燈亮(準備變紅燈),南北兩側紅燈亮。
    沙發
    發表于 2012-11-29 16:39:04 | 只看該作者
    這個我還真的是不懂的
    板凳
    發表于 2012-11-30 10:02:14 | 只看該作者
    這是一個狀態機問題,4狀態輸入,12狀態輸出。
    地板
    發表于 2012-11-30 10:28:21 | 只看該作者
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_ARITH.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;
    use ieee.numeric_std.all;

    entity CrossLED is
       Port (
          nRST:    in    std_logic;                    -- 系統復位控制信號,低電平有效。
    --
    --                各信號下標3、2、1、0對應方向東、南、西、北。
    --                輸出0,對應信號燈亮;輸出1,對應信號燈滅。
    --
                    State:        in                std_logic_vector(1 downto 0);        --
                    Yellow:        out        std_logic_vector(3 downto 0);
                    Red:                out        std_logic_vector(3 downto 0);
                    Blue:                out        std_logic_vector(3 downto 0)
       );
    end CrossLED;

    architecture Behavioral of CrossLED is
    begin
            Yellow        <= "0000"                when nRST  = '0'  else        -- 復位狀態東西南北黃燈亮。
                                       "1111"                when State = "00" else        -- 東西兩側紅燈亮,南北兩側綠燈亮。
                                       "1010"                when State = "01" else        -- 東西兩側紅燈亮,南北兩側黃燈亮(準備變紅燈)。
                                       "1111"                when State = "10" else        -- 東西兩側綠燈亮,南北兩側紅燈亮。
                                       "0101"                when State = "11" else        -- 東西兩側黃燈亮(準備變紅燈),南北兩側紅燈亮。
                                       "0000";
            Red                <= "1111"                when nRST  = '0'  else        -- 復位狀態東西南北黃燈亮。
                                       "0101"                when State = "00" else        -- 東西兩側紅燈亮,南北兩側綠燈亮。
                                       "0101"                when State = "01" else        -- 東西兩側紅燈亮,南北兩側黃燈亮(準備變紅燈)。
                                       "1010"                when State = "10" else        -- 東西兩側綠燈亮,南北兩側紅燈亮。
                                       "1010"                when State = "11" else        -- 東西兩側黃燈亮(準備變紅燈),南北兩側紅燈亮。
                                       "1111";
            Blue                <= "1111"                when nRST  = '0'  else        -- 復位狀態東西南北黃燈亮。
                                       "1010"                when State = "00" else        -- 東西兩側紅燈亮,南北兩側綠燈亮。
                                       "1111"                when State = "01" else        -- 東西兩側紅燈亮,南北兩側黃燈亮(準備變紅燈)。
                                       "0101"                when State = "10" else        -- 東西兩側綠燈亮,南北兩側紅燈亮。
                                       "1111"                when State = "11" else        -- 東西兩側黃燈亮(準備變紅燈),南北兩側紅燈亮。
                                       "1111";
    end Behavioral;
    地下室
     樓主| 發表于 2012-12-2 14:52:07 | 只看該作者
    謝謝大家嘍!
    6
    發表于 2012-12-4 23:46:28 | 只看該作者
    student homework?
    7
    發表于 2012-12-17 20:27:56 | 只看該作者
    寫了一個verilog版,僅供樓主參考.
    module traffic_led(rst_n, clk, r1, y1, g1, r2, y2,g2);
    input rst_n, clk;
    output  r1, y1, g1, r2, y2,g2;
    reg r1, y1, g1, r2, y2,g2;
    reg [4:0] state, nextstate;

    parameter  s0 = 5'b00001, s1 = 5'b00010, s2 = 5'b00100, s3 = 5'b01000, s4 = 5'b10000;

    always @(posedge clk or negedge rst_n)
    begin
        if(rst_n == 0)
             begin  
               state <= s0;
             end
             else
             begin
               state <= nextstate;
             end
    end
    always @(state)
    begin
      case(state)
        s0: begin
                   r1 <= 0;
                             y1 <= 1;
                             g1 <= 0;
                             r2 <= 0;
                             y2 <= 1;
                             g2 <= 0;
                             nextstate <= s1;
            end
             s1: begin
                   r1 <= 1;
                             y1 <= 0;
                             g1 <= 0;
                             r2 <= 0;
                             y2 <= 0;
                             g2 <= 1;
                             nextstate <= s2;
            end
             s2: begin
                   r1 <= 1;
                             y1 <= 0;
                             g1 <= 0;
                             r2 <= 0;
                             y2 <= 1;
                             g2 <= 0;
                             nextstate <= s3;
            end
             s3: begin
                   r1 <= 0;
                             y1 <= 0;
                             g1 <= 1;
                             r2 <= 1;
                             y2 <= 0;
                             g2 <= 0;
                             nextstate <= s4;
            end
             s4: begin
                   r1 <= 0;
                             y1 <= 1;
                             g1 <= 0;
                             r2 <= 1;
                             y2 <= 0;
                             g2 <= 0;
                             nextstate <= s1;
            end
             default: nextstate <= s0;
            endcase
         
    end
    endmodule
    8
    發表于 2012-12-17 20:28:18 | 只看該作者
    這個是測試程序

    `timescale  100ns/10ns
    module testbrench;
    reg rst_n, clk;
    wire r1, y1, g1, r2, y2,g2;

    traffic_led tl1(rst_n, clk, r1, y1, g1, r2, y2,g2);
    initial
    begin
      rst_n = 1;
      clk = 0;
    end
    always
    begin
      #5 clk = ~clk;
    end
    initial
    begin
    #10 rst_n = 0;
    #20 rst_n = 1;
    end
    endmodule
    9
    發表于 2012-12-27 08:31:09 | 只看該作者
    學習了。。。。。。。。。。。。。。。。。。。。
    10
    發表于 2013-8-21 08:47:20 | 只看該作者
    復制下來。。。。。。!我自己好好學習。。。。。。。。。。。。。。。。。。!

    謝謝.jpg (8.65 KB)

    謝謝.jpg
    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷