Verilog學習筆記簡單功能實現(五)...............序列檢測設計

来源:http://www.cnblogs.com/SYoong/archive/2016/10/12/5953339.html
-Advertisement-
Play Games

這裡採用夏宇聞教授第十五章的序列檢測為例來學習; 從以上的狀態轉換圖可以寫出狀態機的程式: 以下是測試模塊: 其實這裡也可以採用六個狀態來實現功能: 以下是測試模塊: 也可以用移位寄存器來實現: 1 module seqdet 2 ( 3 input wire x, 4 input wire clk ...


 

 

 

這裡採用夏宇聞教授第十五章的序列檢測為例來學習;

從以上的狀態轉換圖可以寫出狀態機的程式:

 1 module seqdet(x,out,clk,rst);
 2   input x,clk,rst;
 3   output out;
 4   reg [2:0]state;
 5   wire out;
 6   parameter IDLE=3'b0, 
 7             A=3'd1,
 8             B=3'd2,
 9             C=3'd3,
10             D=3'd4,
11             E=3'd5,
12             F=3'd6,
13             G=3'd7;
14   assign out=(state==D&&x==0)?1:0;
15   always @(posedge clk or negedge rst)
16   begin
17   if(!rst)
18     state=IDLE;
19     else
20     case(state)
21       IDLE:if(x==1) state<=A;
22            else state<=IDLE;
23       A:if(x==0) state<=B;
24         else state<=A;
25       B:if(x==0) state<=C;
26         else state<=F;
27       C:if(x==1) state<=D;
28         else state<=G;
29       D:if(x==0) state<=E;
30         else state<=A;
31       E:if(x==0) state<=C;
32         else state<=A;
33       F:if(x==0) state<=B;
34         else state<=A;
35       G:if(x==1) state<=F;
36         else state<=G;
37       default: state<=IDLE;
38     endcase 
39   
40   end
41 endmodule

以下是測試模塊:

 1 `timescale 1ns/1ns
 2 `define halfperiod 20
 3 
 4 module testseqdet;
 5   reg clk,rst;
 6   reg [23:0]data;
 7   wire out,x;
 8   assign x=data[23];
 9   initial begin
10   clk=0;
11   rst=1;
12   #2 rst=0;
13   #30 rst=1;
14   data=20'b1100_1001_0000_1001_0100;
15   end
16   always #(`halfperiod) clk=~clk;
17   always @(posedge clk)
18   begin  
19   #2 data={data[22:0],data[23]};
20   end
21   seqdet m(.x(x),.out(out),.clk(clk),.rst(rst));
22 endmodule

其實這裡也可以採用六個狀態來實現功能:

 

 1 module seqdet(x,out,clk,rst,state);
 2   input x,clk,rst;
 3   output out;
 4   output [2:0]state;
 5   reg [2:0]state;
 6   wire out;
 7   parameter IDLE=3'd0,
 8             A=3'd1,
 9             B=3'd2,
10             C=3'd3,
11             D=3'd4,
12             E=3'd5;
13   assign out=(state==D&&x==0)?1:0;
14   always @(posedge clk)
15   begin
16   if(!rst)  state<=IDLE;
17   else
18     case(state)
19       IDLE:if(x==1) state<=A;
20            else state<=IDLE;
21       A:if(x==0) state<=B;
22         else state<=A;
23       B:if(x==0) state<=C;
24         else state<=A;
25       C:if(x==1) state<=D;
26         else state<=IDLE;
27       D:if(x==0) state<=E;
28         else state<=A;
29       E:if(x==0) state<=C;
30         else state<=A;
31       default: state<=IDLE;
32     endcase
33   end
34 endmodule

以下是測試模塊:

 

 1 `timescale 1ns/1ns
 2 module test_seqdet;
 3   reg clk,rst;
 4   reg [22:0]data;
 5   wire [2:0]state;
 6   wire x,out;
 7   assign x=data[22];
 8   initial
 9   begin
10   clk=0;
11   rst=1;
12   #2  rst=0;
13   #30 rst=1;
14   data=20'b1100_1001_0000_1001_0100;
15   end
16   
17   always #20 clk=~clk;
18   always @(posedge clk)
19   begin
20   data={data[21:0],data[22]};  
21   end
22   seqdet m(.x(x),.clk(clk),.rst(rst),.out(out),.state(state));
23 endmodule
    也可以用移位寄存器來實現:
 1 module seqdet 
 2 ( 
 3    input wire x, 
 4    input wire clk, 
 5    input wire rst, 
 6    output wire z, 
 7    output reg [4:0] q 
 8 ); 
 9   
10 wire [4:0] q_next; 
11   
12 assign q_next ={q[3:0],x}; 
13 assign z = (q_next== 5'b10010) ? 1'b1:1'b0; 
14   
15 always @ (posedge clk,negedge rst) 
16    if(!rst) 
17       q <= 5'd0; 
18    else
19       q <= q_next; 
20   
21 endmodule

寄存器的實現參照http://www.cnblogs.com/qiweiwang/archive/2011/04/18/2019952.html ,在這裡感謝齊威王!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • re 正則表達式操作 本模塊提供了類似於Perl的正則表達式匹配操作。要匹配的模式和字元串可以是Unicode字元串以及8位字元串。 正則表達式使用反斜杠字元('\')來表示特殊的形式或者來允許使用特殊的字元而不要啟用它們特殊的含義。這與字元串字面值中相同目的的相同字元的用法衝突;例如,要匹配一個反 ...
  • 作為一個學習java的人,首先我們要瞭解java是幹嘛的,java能做什麼,以及java的歷史背景,只有當我們瞭解了java這些基礎,我們學習java才能事倍功半。 Java的歷史背景 Java是由Sun Microsystems公司推出的Java面向對象程式設計語言(以下簡稱Java語言)和Jav ...
  • 一個C程式是由一個或者多個函數組成,並必須只有一個main()函數。我建議不要使用void main的形式,同建議用 int main 然後return 0;的形式,至於為什麼要這樣做,我也不知道。 一個文件內、一個函數內、一個控制語句內、一對花括弧內,都可以稱為一個代碼塊。 聲明與定義 int n ...
  • 題目鏈接 http://acm.hdu.edu.cn/showproblem.php?pid=5091 Problem Description Recently, the γ galaxies broke out Star Wars. Each planet is warring for resou ...
  • 一、看一下簡單的通過XML的AOP配置 1.首先創建一個簡單的Student類 2.創建一個簡單的aspect切麵class 3.SpringAOP.xml配置 分析一下這個execution(* com.seeyon.SpringBean.aop.Student.get*(..))切點表達式: ( ...
  • 一、映射多對一關聯關係。 1.單向的多對一 (1)以 Customer 和 Order 為例:一個用戶可以發出多個訂單,而一個訂單隻能屬於一個客戶。從 Order 到 Customer 是多對一關聯關係。 (2)創建 Customer 和 Order 表。 CREATE TABLE customer ...
  • 一、單向的多對一 1.建表語句 2.Intellij Idea 操作 3.Order.hbm.xml 文件 二、雙向的多對一 1.建表語句和單向的多對一相同 2.Intellij Idea 操作 3.生成的實體 4.hbm 文件 三、基於外鍵的雙向一對一 1.建表語句 2.生成的實體 3.hbm文件 ...
  • 概述 C語言的數據類型有基本類型,構造類型,指針類型,空類型 空類型就是void,指針類型這裡不說,構造類型也不說(數組,結構體,聯合體,枚舉,嵌套),這裡只說基本類型。 基本類型有:短整型(short)、整型(int)、長整型(long)、字元型(char)、單精度浮點型(float)、雙精度浮點 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...