

> assign語句賦值號左邊只能是wire類型(只在wire與reg型之中做討論)。
> always塊語句中,被賦值的只能是reg類型。
```
/************************************************************************
模塊功能:對串行輸入的數據流進行檢測。只要發現10010序列,就立即輸出高電平。
*************************************************************************/
module seqdet(x,z,clk,rst_n);
input clk,rst_n;
input x;
output z;
reg z;
reg [2:0] pstate,nstate;
parameter s1=3'd0,
s2=3'd1,
s3=3'd2,
s4=3'd3,
s5=3'd4,
s6=3'd5;
//* 使用熱獨碼會更好些。
//第一段: 現態與次態轉換 時序電路
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
pstate<=s1;
else
pstate<=nstate;
end
//第二段:各種狀態間的跳變。 組合電路
always @(pstate or x)
begin
case(pstate)
s1:
if(x==1)
nstate=s2;
else
nstate=s1;
s2:
nstate=x?s2:s3;
s3:
nstate=x?s2:s4;
s4:
nstate=x?s5:s1;
s5:
nstate=x?s2:s6;
s6:
nstate=x?s2:s4;
default:
nstate=s1;
endcase
end
//第三段:確定最終的狀態
always @(pstate or x or rst_n)
begin
if(!rst_n==1)
z=1'b0;
else if(pstate==s5 && x==0)
z=1'b1;
else
z=1'b0;
end
endmodule
```
```
`timescale 1 ns/ 1 ps
module seqdet_vlg_tst();
reg clk;
reg rst_n;
wire x;
wire z;
reg[19:0] data;
assign x=data[19];
seqdet i1 (
.clk(clk),
.rst_n(rst_n),
.x(x),
.z(z)
);
initial
begin
clk=0;
rst_n=0;
#500 rst_n=1;
data=20'b1100_1001_0000_1001_0100;
#(100*100) $stop;
end
always
#50 clk=~clk;
always @(posedge clk)
begin
#2 data={data[18:0],data[19]};
end
endmodule
```
- 空白目錄
- 流水線
- 流水線性能測評
- 計算機性能測評
- 流水線設計
- 購物車狀態機
- 序列檢測器
- 序列檢測10010
- 序列檢測10010帶圖
- 反相器
- 計數器
- 分頻電路
- 偶數分頻
- 奇數分頻
- 小數分頻
- 同步復位異步釋放all
- 對的-異步復位同步釋放原理
- 同步復位異步釋放
- 異步復位為什么要同步釋放 ?
- FPGA-異步復位同步釋放 通俗解釋
- 同步復位
- 狀態機
- 狀態機的分類
- 狀態機5個要素
- FIFO
- 異步fifo中同步為什么要用兩級觸發器
- 亞穩態
- 亞穩態的產生機理、消除辦法 (可以理解為什么打拍)
- 面向對象思想
- 為什么D觸發器有setup time和hold time的要求
- Tsu,Tco,Th,Tpd的概念
- verilog
- 自啟動
- 毛刺
- 馮諾依曼