【Verilog】實驗十 帶倒計時交通燈控制電路設計

目錄

一、實驗目的

二、實驗環境

三、實驗任務

四、實驗原理與實驗步驟

1. 實驗原理

2. 實驗步驟

五、實驗思考

代碼

TOP.v

trafic2_2.v

shumaguan.v

clk_div.v


一、實驗目的

1. 掌握同步有限狀態機的設計方法。

2. 采用狀態機的設計方法,設計實現帶倒計時的交通燈控制電路。

二、實驗環境

1. 裝有ModelSim和Vivado的計算機。

2. Sword實驗系統。

三、實驗任務

1. 理解交通燈控制系統的應用要求,采用狀態機設計方法,實現帶倒計時的交通燈控制系統設計,并在ModelSim上實現功能仿真。

2. 生成FPGA設計文件,下載到Sword實驗系統上驗證電路功能。

四、實驗原理與實驗步驟

1. 實驗原理

有限狀態機是時序電路的通用模型,任何時序電路都可以表示為有限狀態機。?

狀態機的基本結構如下圖所示。

在一些應用中,通常希望產生任意的狀態序列,并且每個狀態停留任意時間。采用狀態機的設計思想實現。交通燈控制系統就是其中的一個實例。

現要求東西大街和南北大街的交通燈亮滅狀態如下表所示。?各個狀態的延時時間如表1所示。

狀態

南北大街

東西大街

時延(s)

0

9

1

3

2

9

4

3

表1 交通燈狀態表

2. 實驗步驟

??(1)根據表1,確定交通燈狀態轉移圖,采用可綜合設計風格設計狀態機代碼。

如果倒計時9~1,就把count初值設置為1

如果倒計時8~0,就把count初值設置為0,count<8,count<2

(2)編寫測試模塊,完成modelsim下電路的功能仿真,驗證電路功能。

100001(21h)

100010(22h)

001100(0ch)

010100(14h)

?(3)建立完成I/O引腳分配。

系統時鐘為100MHz,從提供的clkdiv引出clkdiv[24](頻率為6Hz)狀態機的輸入時鐘。

用SW[0]做為clr信號。

用LED[5:3]做為東西大街紅黃綠燈,以LED[2:0]做為南北大街紅黃綠燈。

板的是將分成C1和狀態寄存器兩個模塊

(3)生成FPGA文檔,并下載到實驗板上物理運行,檢查設計結果。在Led等狀態修改的同時,數碼管可以顯示倒計時時間。

五、實驗思考

1、總結自己設計中,倒計時時間輸出的實現方法。

用counter=sec-count來實現倒計時

2、課堂給出的交通燈例子是將生成下一個狀態的組合邏輯C1與狀態寄存器寫在一個always塊中,試將其分成C1和狀態寄存器兩個模塊。并嘗試下板。

(提示:由于狀態轉移是在C1中通過判斷對時鐘的計數個數count來確實是否轉移,如果要轉移到下一個狀態,count需要清零。但同時在狀態寄存器模塊中,每次來一個clock上升沿,需要對count進行加1的操作。此時就會出現在C1和狀態存儲器中都對count賦值,如果下板會出現類似multi-driven的提示。該如何處理,可以想一想試一試。)

代碼

TOP.v

`timescale 1ns / 1ps
module 	 TOP(input  wire clk_100mhz,// I/O:input  wire[15:0]SW,output wire led_clk,output wire led_clrn,output wire led_sout,output wire LED_PEN,output wire seg_clk,output wire seg_clrn,output wire seg_sout,output wire SEG_PEN					);wire[31:0]Div;wire[15:0]LED_DATA;wire CK;wire[63:0] disp_data;	wire[5:0] out;wire[3:0] counter;traffic2_2 U1(Div[24],SW[0],out,counter);shumaguan U3(disp_data[63:56],counter);		clk_div       U8(clk_100mhz,1'b0,SW[2],Div,CK);assign disp_data[55:0]=56'hffffffffffffff;P2S 			  #(.DATA_BITS(64),.DATA_COUNT_BITS(6)) P7SEG (clk_100mhz,1'b0,Div[20],disp_data,seg_clk,seg_clrn,seg_sout,SEG_PEN);LED_P2S 			  #(.DATA_BITS(16),.DATA_COUNT_BITS(4)) PLED (clk_100mhz,1'b0,Div[20],LED_DATA,led_clk,led_clrn,led_sout,LED_PEN);assign LED_DATA = ~{out[0],out[1],out[2],out[3],out[4],out[5],1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0};	endmodule

trafic2_2.v

module traffic2_2(input wire clk,		input wire clr,output reg [5:0]lights,output reg [3:0]counter);reg[1:0] pstate,nstate;reg [4:0]count;parameter s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;parameter sec9=8,sec3=2;always @(posedge clk or posedge clr)beginif(clr==1)begin//state<=s0;pstate<=s0;count<=0;endelsebeginif(pstate==s0 | pstate==s2)if(count<sec9)count<=count+1;elsebeginpstate<=nstate;count<=0;endelse if(pstate==s1 | pstate==s3)if(count<sec3)count<=count+1;elsebeginpstate<=nstate;count<=0;endendend//C1always@(*)begincase(pstate)s0:	nstate=s1;s1:	nstate=s2;s2:	nstate=s3;s3:	nstate=s0;default nstate<=s0;endcaseend//C2always @(*)begincase (pstate)s0: begin lights=6'b100001;counter=sec9-count;ends1: begin lights=6'b100010;counter=sec3-count;ends2: begin lights=6'b001100;counter=sec9-count;ends3: begin lights=6'b010100;counter=sec3-count;enddefault begin lights=6'b100001;counter=sec9-count;endendcaseendendmodule

shumaguan.v

module shumaguan(out,in);output[7:0] out;input[3:0] in;reg[7:0] out;always@(in)begincase(in)4'b0000: out=8'b00000011;4'b0001: out=8'b10011111;4'b0010: out=8'b00100101;4'b0011: out=8'b00001101;4'b0100: out=8'b10011001;4'b0101: out=8'b01001001;4'b0110: out=8'b01000001;4'b0111: out=8'b00011111;4'b1000: out=8'b00000001;4'b1001: out=8'b00001001;4'b1010: out=8'b00010001;4'b1011: out=8'b11000001;4'b1100: out=8'b01100011;4'b1101: out=8'b10000101;4'b1110: out=8'b01100001;4'b1111: out=8'b01110001;default: out=8'b0;endcaseend
endmodule

clk_div.v

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date:    17:19:38 07/17/2012 
// Design Name: 
// Module Name:    clk_div 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//
module clk_div(input clk,input rst,input SW2,output reg[31:0]clkdiv,output Clk_CPU);// Clock divider-時鐘分頻器always @ (posedge clk or posedge rst) begin if (rst) clkdiv <= 0; else clkdiv <= clkdiv + 1'b1; endassign Clk_CPU = (SW2)? clkdiv[24] : clkdiv[0];endmodule

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75222.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75222.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75222.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux : System V 共享內存

目錄 一 前言 二 共享內存概念 三 共享內存創建 四 查看共享內存 五 共享內存的刪除 六 共享內存的關聯 七 共享內存去關聯 八 共享內存的使用&#xff08;通信&#xff09; 九 共享內存的特點 一 前言 共享內存區是最快的IPC形式&#xff08;進程間通信&#xff1…

Spring Cloud 2023.x安全升級:OAuth2.1與JWT動態輪換實戰

引言&#xff1a;當安全遇上云原生&#xff0c;零停機密鑰輪換成為剛需 在微服務架構中&#xff0c;OAuth2.1與JWT已成為身份驗證的黃金標準&#xff0c;但傳統方案存在兩大痛點&#xff1a; 密鑰輪換風險&#xff1a;手動替換JWT密鑰需重啟服務&#xff0c;導致短暫鑒權中斷&…

創建私人阿里云docker鏡像倉庫

一.登錄阿里云 https://cr.console.aliyun.com/cn-hangzhou/instances 二.創建個人實例 【實例列表】 》【創建個人實例】 》【設置Registry登錄密碼】 三.創建命名空間 步驟&#xff1a;【個人實例】》【命名空間】》【創建命名空間】 注:一個賬號最多可以創建3個命名空…

oracle基礎知識視圖的定義和應用

1.1 視圖的定義 視圖(View)是數據庫中非常重要的內容&#xff0c;在實際開發中必須學會視圖的編寫。 用于產生視圖的表叫做該視圖的基表。一個視圖也可以從另一個視圖中產生。視圖是可以嵌套的。 視圖的定義存在數據庫中&#xff0c;與此定義相關的數據并沒有再存一份于數據庫中…

邊緣計算:工業自動化的智能新引擎

在工業4.0的浪潮中&#xff0c;工業自動化正經歷著前所未有的變革。隨著物聯網&#xff08;IoT&#xff09;技術的普及&#xff0c;越來越多的工業設備被連接到網絡中&#xff0c;產生了海量的數據。然而&#xff0c;傳統的云計算架構在處理這些實時性要求極高的工業數據時&…

12-SpringBoot3入門-項目打包和運行

1、打包 1&#xff09;打包插件 pom.xml <!--SpringBoot應用打包插件--> <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plu…

【PCIE711-214】基于PCIe總線架構的4路HD-SDI/3G-SDI視頻圖像模擬源

產品概述 PCIE711-214是一款基于PCIE總線架構的4路SDI視頻模擬源。該板卡為標準的PCIE插卡&#xff0c;全高尺寸&#xff0c;適合與PCIE總線的工控機或者服務器&#xff0c;板載協議處理器&#xff0c;可以通過PCIE總線將上位機的YUV 422格式視頻數據下發通過SDI接口播放出去&…

PipeWire 音頻設計與實現分析一——介紹

PipeWire 是一個基于圖的媒體處理引擎&#xff0c;一個可以運行多媒體節點圖的媒體服務器&#xff0c;是 Linux 的音頻/視頻總線&#xff0c;它管理 Linux 系統中&#xff0c;不同應用程序對音頻和視頻設備的共享訪問。它提供了一個本地客戶端音頻 API&#xff0c;但也提供兼容…

使用卷積神經網絡識別MNIST數據集

卷積神經網絡 卷積神經網絡本質是共享權重稀疏鏈接的全連接網絡 編寫步驟 構建一個神經網絡&#xff0c;步驟是幾乎不變的&#xff0c;大概有以下幾步 準備數據集 #更高級的CNN網絡 import torch import torch.nn as nn import torch.nn.functional as F import torchvisi…

力扣125.驗證回文串

如果在將所有大寫字符轉換為小寫字符、并移除所有非字母數字字符之后&#xff0c;短語正著讀和反著讀都一樣。則可以認為該短語是一個 回文串 。 字母和數字都屬于字母數字字符。 給你一個字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否則&#…

UR機械臂sim2real推薦包

推薦一個和ur機械臂配套的interface&#xff1a; ur_rtde Universal Robots RTDE C Interface — ur_rtde 1.6.0 documentation 也歡迎大家提供新想法和bug

CST學習筆記(三)MATLAB與CST聯合仿真-遠場數據批量導出

CST學習筆記&#xff08;三&#xff09;MATLAB與CST聯合仿真-遠場數據批量導出 一、直接數據導出 &#xff08;1&#xff09;打開遠場&#xff0c;調至笛卡爾坐標系 &#xff08;2&#xff09;然后點擊post processing → Import/Export → Plot Data (ASCII) &#xff0c;即…

藍橋杯---BFS解決FloofFill算法1---圖像渲染

文章目錄 1.算法簡介2.題目概述3.算法原理4.代碼分析 1.算法簡介 這個算法是關于我們的floodfill的相關的問題&#xff0c;這個算法其實從名字就可以看出來&#xff1a;洪水灌溉&#xff0c;其實這個算法的過程就和他的名字非常相似&#xff0c;下面的這個圖就生動的展示了這個…

我與數學建模之啟程

下面的時間線就是從我的大二上開始 9月開學就迎來了本科階段最重要的數學建模競賽——國賽&#xff0c;這個比賽一般是在9月的第二周開始。 2021年國賽是我第一次參加國賽&#xff0c;在報名前我還在糾結隊友&#xff0c;后來經學長推薦找了另外兩個學長。其實第一次國賽沒啥…

利用 SSRF 和 Redis 未授權訪問進行內網滲透

目錄 環境搭建 ?編輯 發現內網存活主機 ?編輯 掃描內網端口 ?編輯 利用 Redis 未授權訪問進行 Webshell 寫入 步驟1&#xff1a;生成 payload 方式1&#xff1a;使用python生成 payload 方式二&#xff1a;使用 Gopher 工具 步驟 2&#xff1a;寫入 Webshell&#xf…

【Vue2插槽】

Vue2插槽 Vue2插槽默認插槽子組件代碼&#xff08;Child.vue&#xff09;父組件代碼&#xff08;Parent.vue&#xff09; 命名插槽子組件代碼&#xff08;ChildNamed.vue&#xff09;父組件代碼&#xff08;ParentNamed.vue&#xff09; 代碼解釋 Vue2插槽 Vue2插槽 下面為你詳…

ORB-SLAM學習感悟記錄

orb特征點的旋轉不變性 利用灰度質心法求出的質心后&#xff0c;與形心連線所形成的角度如下圖所示&#xff1a; 這里容易對上圖進行誤解&#xff1a; 為了保證旋轉不變性&#xff0c;這里注意ORB-slam是利用這個角度旋轉坐標系&#xff0c;以新坐標系為標準從圖像中采點進行…

搜索算法------深度優先搜索

1. 介紹 深度優先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;是一種用于遍歷或搜索樹或圖的算法。這種算法通過盡可能深地搜索圖的分支來探索解決方案空間&#xff0c;直到達到一個沒有分支的點&#xff0c;然后回溯 1.1 原理 選擇起始點&#xff1a;從…

4.2 單相機引導機器人放料-僅考慮角度變化

【案例說明】 本案例產品在托盤中,角度變化不大(<15度);抓取沒有問題,只是放的穴位只能容許3度的角度偏差,因此需要測量產品的角度。 思路是:機器人抓料后、去固定拍照位拍照(找到與標準照片的角度偏差),機器人在放料的位置上多旋轉這個角度偏差,把產品放進去。 …

六級詞匯量積累day13

commend 表揚 exhaust 耗盡&#xff0c;用盡 weary 疲憊的&#xff0c;勞累的 fatigue 疲憊&#xff0c;勞累 obese 臃腫的&#xff0c;肥胖的 adopt 采納&#xff0c;收養 adapt 適應 accomplish 完成&#xff0c;實現 accomplishment 成就 achieve 實現&#xff0c;完成 achi…