設(shè)計(jì)背景:
在我們工程設(shè)計(jì)中,有時(shí)會(huì)需要到上升沿和下降沿這么一個(gè)說(shuō)法,通過(guò)上升沿和下降沿來(lái)驅(qū)動(dòng)一個(gè)電路,那么學(xué)習(xí)邊沿檢測(cè)就非常的重要了。
設(shè)計(jì)原理:
在學(xué)習(xí)邊沿檢測(cè)前我們先學(xué)習(xí)一下下面的電路,這樣方便我們學(xué)習(xí),邊沿檢測(cè)。
這個(gè)電路的意思就是,輸入一個(gè)信號(hào)后我們經(jīng)過(guò)一個(gè)寄存器,然后把這個(gè)寄存器的輸出,和下次輸出的值取反后相與,那么我們就可以這么想,如果一個(gè)高平的值經(jīng)過(guò)這個(gè)寄存器后延遲一個(gè)上升沿后輸出也為高電平,那么當(dāng)輸出的時(shí)候會(huì)有一個(gè)新的電平值,也就是一個(gè)電平的到來(lái),然后通過(guò)低電平的值取反后和寄存器輸出的高電平值得與得到一個(gè)高電平的脈沖值,然后對(duì)低電平轉(zhuǎn)化為高電平也是一樣的道理,這樣我們就可以得到時(shí)鐘上升沿和下降沿的高脈沖,這樣就得到了我們?cè)O(shè)計(jì)的目的。
設(shè)計(jì)架構(gòu)圖:
設(shè)計(jì)代碼:
設(shè)計(jì)模塊
0moduleedge_jiance(clk,rst_n,signle,nege_dge,pose_dge);
1
2 inputclk;
3 inputrst_n;
4 inputsignle;//輸入信號(hào)
5
6 outputnege_dge;//輸出下降沿的脈沖
7 outputpose_dge;//輸出上升沿的脈沖
8
9 reg[1:0]signle_s;
10 always@(posedgeclk ornegedgerst_n)
11 if(!rst_n)
12 begin
13 signle_s <=2'b11;
14 end
15 else
16 begin
17 signle_s[0]<=signle;//把輸入信號(hào)給一個(gè)寄存器
18 signle_s[1]<=signle_s[0];
19 end
20
21 assignpose_dge =signle_s[0]&&~signle_s[1];//取反相與得到上 升沿的高脈沖
22 assignnege_dge =~signle_s[0]&&signle_s[1];//取反相與得到下 降沿的高脈沖
23endmodule
測(cè)試模塊
0`timescale1ns/1ps
1
2moduleedge_tb();
3
4 regclk;
5 regrst_n;
6 regsignle;
7
8 wirenege_dge;
9 wirepose_dge;
10
11 initialbegin
12 clk =1'b1;
13 rst_n =1'b0;
14 signle <=1'b1;//復(fù)位賦值
15
16 #100.1rst_n =1'b1;
17
18 #36signle <=1'b1;//模擬下降沿
19 #36signle <=1'b0;
20
21 #100
22 #36signle <=1'b0;//模擬上升沿
23 #36signle <=1'b1;
24
25 #100
26 $stop;
27 end
28
29 always#10clk =~clk;//產(chǎn)生晶振時(shí)鐘
30
31 edge_jiance edge_dut(//模塊例化
32 .clk(clk),
33 .rst_n(rst_n),
34 .signle(signle),
35 .nege_dge(nege_dge),
36 .pose_dge(pose_dge)
37 );
38endmodule
仿真圖:
我們模擬的上升沿和下降沿在仿真中可以清楚的看到,然后我們通過(guò)邊沿檢測(cè)電路,可以得出我們一個(gè)高電平的上升沿,和一個(gè)低電平的下降沿。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21753瀏覽量
604194
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論