在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Altera MAX10: 交通燈控制

            Altera MAX10: 交通燈控制

            作者: 時間:2023-11-17 來源:電子森林 收藏

            本文引用地址:http://www.biyoush.com/article/202311/453010.htm

            上圖為十字路口交通示意圖分之路與主路,要求如下:

            • 主路上綠燈持續(xù)15s的時間,黃燈3s的時間,紅燈10s的時間;
            • 交通燈支路上綠燈持續(xù)7s的時間, 黃燈持續(xù)3秒的時間,紅燈18秒的時間;

            根據(jù)上述要求,設(shè)計框架分析如下:

            • S1:主路綠燈點亮,支路紅燈點亮,持續(xù)15s的時間;
            • S2:主路黃燈點亮,支路紅燈點亮,持續(xù)3s的時間;
            • S3:主路紅燈點亮,支路綠燈點亮,持續(xù)10s的時間;
            • S4:主路紅燈點亮,支路黃燈點亮,持續(xù)3s的時間;

            首先是時鐘分頻部分:

            //********************************************************
            //   Copyright(c)2016, STEP  
            //   All rights reserved
            //   File name       :   divide.v
            //   Module name     :   divide
            //   Author          :   STEP
            //   Email           :   [email protected]
            //   Data            :   2016/08/01
            //   Version         :   V1.0
            //   Description     :   
            //
            //   Modification history
            //   ----------------------------------------------------------------------------
            // Version       
            // Description
            //
            //******************************************************** 
            //*******************
            //DEFINE MODULE PORT
            //*******************
            module divide(
            	//INPUT
            	clk			,
            	rst_n			,
            	//OUTPUT
            	clkout			
            );
            	//*******************
            	//DEFINE PARAMETER
            	//*******************
            	parameter			WIDTH	=	3;
            	parameter			N		=	5; 	//*******************
            	//DEFINE INPUT
            	//*******************
            	input 	clk,rst_n;          //*******************
            	//DEFINE OUTPUT
            	//*******************
            	output	clkout; 	//********************
            	//OUTPUT ATTRIBUTE
            	//********************
            	//REGS
            	reg 	[WIDTH-1:0]		cnt_p,cnt_n;
            	reg						clk_p,clk_n; 	
            	assign clkout = (N==1)?clk:(N[0])?(clk_p&clk_n):clk_p; 	//Sequential logic style
            	always @ (posedge clk)
            		begin
            			if(!rst_n)
            				cnt_p<=0;
            			else if (cnt_p==(N-1))
            				cnt_p<=0;
            			else cnt_p<=cnt_p+1;
            		end 	always @ (negedge clk)
            		begin
            			if(!rst_n)
            				cnt_n<=0;
            			else if (cnt_n==(N-1))
            				cnt_n<=0;
            			else cnt_n<=cnt_n+1;
            		end 	always @ (posedge clk)
            		begin
            			if(!rst_n)
            				clk_p<=0;
            			else if (cnt_p<(N>>1))  
            				clk_p<=0;
            			else 
            				clk_p<=1;
            		end 	always @ (negedge clk)
            		begin
            			if(!rst_n)
            				clk_n<=0;
            			else if (cnt_n<(N>>1))  
            				clk_n<=0;
            			else 
            				clk_n<=1;
            		end
            		endmodule


            接下來就是利用三段式狀態(tài)機實現(xiàn)的交通燈部分:

            //********************************************************
            //   Copyright(c)2016, STEP  
            //   All rights reserved
            //   File name       :   traffic.v
            //   Module name     :   traffic
            //   Author          :   STEP
            //   Email           :   [email protected]
            //   Data            :   2016/08/01
            //   Version         :   V1.0
            //   Description     :   
            ////   Modification history
            //   ----------------------------------------------------------------------------
            // Version       
            // Description
            //
            //******************************************************** 
            //*******************
            //DEFINE MODULE PORT
            //*******************
            module traffic(
            	//INPUT
            	clk			,
            	rst_n		,
            	//OUTPUT
            	out			
            );
            	//*******************
            	//DEFINE INPUT
            	//*******************
            	input 	clk,rst_n;          //*******************
            	//DEFINE OUTPUT
            	//*******************
            	output	reg[5:0]	out; 	//*******************
            	//DEFINE PARAMETER
            	//*******************    	parameter      	S1 = 4'b00,    
            					S2 = 4'b01,
            					S3 = 4'b10,
            					S4 = 4'b11; 	parameter		time_s1 = 4'd15,
            					time_s2 = 4'd3,
            					time_s3 = 4'd10,
            					time_s4 = 4'd3; 	parameter		led_s1 = 6'b101011,
            					led_s2 = 6'b001011,
            					led_s3 = 6'b011101,
            					led_s4 = 6'b011001; 	//*********************
            	//INNER SIGNAL DECLARATION
            	//*********************
            	//REGS	
            	reg 	[3:0] 	timecont;
            	reg 	[1:0] 	cur_state,next_state;  	//WIRES
            	wire			clk1h; 
            	divide #(.WIDTH(32),.N(12000000)) CLK1H (
            								.clk(clk),
            								.rst_n(rst_n),
            								.clkout(clk1h));
            	//Sequential logic style
            	always @ (posedge clk1h)
            	begin
            		if(!rst_n) cur_state <= S1;
                    else cur_state <= next_state;
            	end 	always @ (cur_state or rst_n or timecont)
            	begin
            		if(!rst_n) begin
            			next_state = S1;
            			end
            		else begin
            			case(cur_state)
            				S1:begin
            					if(timecont==1) next_state = S2;
            					else next_state = S1;
            				end 
                            S2:begin
            					if(timecont==1) next_state = S3;
            					else next_state = S2;
            				end 
                            S3:begin
            					if(timecont==1) next_state = S4;
            					else next_state = S3;
            				end 
                            S4:begin
            					if(timecont==1) next_state = S1;
            					else next_state = S4;
            				end 				default: next_state = S1;
            			endcase
            		end
            	end 	always @ (posedge clk1h)
            	begin
            		if(!rst_n) begin
            			out <= led_s1;
            			timecont <= time_s1;
            		end else begin
            			case(next_state)
            				S1:begin
            					out <= led_s1;
            					if(timecont == 1) timecont <= time_s1;
            					else timecont <= timecont - 1;
            				end 
            				S2:begin
            					out <= led_s2;
            					if(timecont == 1) timecont <= time_s2;
            					else timecont <= timecont - 1;
            				end 
            				S3:begin
            					out <= led_s3;
            					if(timecont == 1) timecont <= time_s3;
            					else timecont <= timecont - 1;
            				end 
            				S4:begin
            					out <= led_s4;
            					if(timecont == 1) timecont <= time_s4;
            					else timecont <= timecont - 1;
            				end 				default:begin
            					out <= led_s1;
            					end
            			endcase
            		end
            	end
            	endmodule

            上正好有4路按鍵和4路開關(guān),可以用來作為輸入信號分別控制數(shù)碼管的輸出。按照下面表格定義輸入輸出信號

            信號引腳信號引腳
            clkJ5rstJ9
            out[0]E14out[1]E15
            out[2]G15out[3]D12
            out[4]C14out[5]C15

            配置好以后編譯下載程序。您也可以試試修改程序,觀察修改代碼對于內(nèi)部電路所造成的影響。

            狀態(tài)機是一類很重要的時序邏輯電路,是許多數(shù)字系統(tǒng)的核心部件,掌握狀態(tài)機的使用是利用FPGA與CPLD進行開發(fā)的一項必會技能,本小節(jié)的交通燈程序即是利用三段式狀態(tài)機描述方法實現(xiàn)的,希望讀者能夠快速掌握這項技能。



            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉