0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Verilog中clk為什么要用posedge,而不用negedge

FPGA設(shè)計(jì)論壇 ? 來(lái)源:FPGA設(shè)計(jì)論壇 ? 作者:FPGA設(shè)計(jì)論壇 ? 2022-08-31 15:51 ? 次閱讀

取某個(gè)信號(hào)的上升沿或下降沿信號(hào)

取一個(gè)信號(hào)的上升沿或下降沿信號(hào),可以通過(guò)將信號(hào)delay后,然后將原信號(hào)和delay信號(hào),通過(guò)不同的與非操作,獲取上升沿信號(hào)或下降沿信號(hào): 階段一: reg delay; // delay信號(hào) always @ ( posedge clk or negedge rstn ) if( !rstn ) delay <= 0; else delay <= orig;? ?// orig是原信號(hào) wire pos_signal = orig && ( ~delay ); // 原信號(hào)上升沿位置處產(chǎn)生的pulse信號(hào) wire neg_signal = ( ~orig ) && delay; // 原信號(hào)下降沿位置處產(chǎn)生的pulse信號(hào) 階段二: 上述操作會(huì)存在亞穩(wěn)態(tài)問(wèn)題,并且得到的上升沿信號(hào)pos_signal和下降沿信號(hào)neg_signal無(wú)法被原采樣時(shí)鐘clk采樣。正確做法是,先將原信號(hào)用采樣時(shí)鐘delay 2次(打兩拍),得到和采樣時(shí)鐘同時(shí)鐘域的信號(hào)delay2,然后再按上述方法獲取上升沿和下降沿信號(hào),這時(shí)得到的上升沿或下降沿就可以被原采樣時(shí)鐘采樣。 例句如下: reg ori_signal;// 需取上升沿或下降沿的原信號(hào) reg delay1; reg delay2; always @ ( posedge clk or negedge rstn ) if( !rstn ) delay1 <= 0; else delay1 <= ori_signal;? ? always @ ( posedge clk or negedge rstn ) if( !rstn ) delay2 <= 0; else delay2 <= delay1;? // delay2 已與clk同域 reg delay3; always @ ( posedge clk or negedge rstn ) if( !rstn ) delay3 <= 0; else delay3 <= delay2;? ? wire pos_signal = delay2 && ( ~delay3 ); // 原信號(hào)上升沿位置處產(chǎn)生的pulse信號(hào) wire neg_signal = ( ~delay2 ) && delay3; // 原信號(hào)下降沿位置處產(chǎn)生的pulse信號(hào) 上升沿電路如下:465c7812-2901-11ed-ba43-dac502259ad0.jpg ? ? ? ?注意:前兩個(gè)觸發(fā)器的運(yùn)用就是起同步作用,將某個(gè)信號(hào)同步到采樣時(shí)鐘域,以后要重點(diǎn)注意使用。 階段三: 用階段二的語(yǔ)句會(huì)比較繁瑣,可以用下述語(yǔ)句簡(jiǎn)化: reg[2:0] delay; always @ ( posedge clk or negedge rstn ) if( !rstn ) delay <= 0; else delay <= { delay[1:0], ori_signal} ; // ori_signal是原信號(hào) wire pos_signal = delay[1] && ( ~delay[2] ); // 原信號(hào)上升沿位置處產(chǎn)生的pulse信號(hào) wire neg_signal = ( ~delay[1] ) && delay[2]; // 原信號(hào)下降沿位置處產(chǎn)生的pulse信號(hào)

Verilog中clk為什么要用posedge,而不用negedge

posedge是上升沿,電平從低到高跳變

negedge是下降沿,電平從高到低跳變

對(duì)于典型的counter邏輯

always @(posedge sys_clk or negedge sys_rst_n) begin

if(!sys_rst_n)

counter <= 24'd0;//十進(jìn)制0

else if(counter < led_time) begin

flag_counter = 1'b0;

counter <= counter + 1'b1;

end

else begin

counter <= 24'd0;

flag_counter = 1'b1;

end

end

clk為什么要用posedge,而不用negedge呢?

一般情況下,系統(tǒng)中統(tǒng)一用posedge,避免用negedge,降低設(shè)計(jì)的復(fù)雜度,可以減少出錯(cuò)。

在ModelSim仿真中,時(shí)鐘是很?chē)?yán)格的,但是在真實(shí)的晶振所產(chǎn)生的clock卻是不嚴(yán)格的,比如高電平和低電平的時(shí)間跨度不一樣,甚至非周期性的微小波動(dòng)。如果只使用posedge,則整個(gè)系統(tǒng)的節(jié)拍都按照clock上升沿對(duì)齊,如果用到了negedge,則系統(tǒng)的節(jié)拍沒(méi)有統(tǒng)一到一個(gè)點(diǎn)上。上升沿到上升沿肯定是一個(gè)時(shí)鐘周期,但是上升沿到下降沿卻很可能不是半個(gè)周期。這都會(huì)出現(xiàn)問(wèn)題。

FPGA特有的東西:Global CLK。FPGA內(nèi)部有專(zhuān)門(mén)的CLK“線(xiàn)”,和一般的邏輯門(mén)的走法不一樣,目的是為了保證整個(gè)FPGA片內(nèi)的時(shí)鐘一致,這個(gè)東西就叫GlobalCLK

467e5dce-2901-11ed-ba43-dac502259ad0.png

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1335

    瀏覽量

    109860
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    1992

    瀏覽量

    60978
  • 上升沿
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    1758

原文標(biāo)題:Verilog學(xué)習(xí)筆記

文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Verilog:【8】基于FPGA實(shí)現(xiàn)SD NAND FLASH的SPI協(xié)議讀寫(xiě)

    ,seg_data_0}) ); always@(posedge clk or negedge rst_n) begin if(rst_n == 1\'b0) wr_cnt <= 10\'d0
    發(fā)表于 06-21 17:58

    關(guān)于Verilog的一些基本語(yǔ)法

    一、了解不同的變量類(lèi)型 ①、wire和reg的區(qū)別 verilog的變量類(lèi)型有wire類(lèi)型和reg類(lèi)型。在實(shí)際的電路wire類(lèi)型對(duì)應(yīng)的就是一根導(dǎo)線(xiàn),只存在傳輸?shù)淖饔谩?b class='flag-5'>而reg類(lèi)型在
    發(fā)表于 05-31 18:31

    新手入門(mén)的簡(jiǎn)單小例子-05-02

    clk or negedge rst_n) if( rst_n == 1\'b0 ) min_data <= 6\'b0; else if( (min_data == 6\'d59
    發(fā)表于 03-26 14:31

    新手入門(mén)的簡(jiǎn)單小例子-05-01

    ); parameter SEC_1S_MAX = 26\'d50_000_000; reg [25:0] count; //板載時(shí)鐘轉(zhuǎn)化為sec計(jì)數(shù)標(biāo)志 always @(posedge clk
    發(fā)表于 03-26 11:41

    verilog實(shí)現(xiàn)卷積運(yùn)算

    Verilog實(shí)現(xiàn)卷積運(yùn)算,你可以使用以下示例代碼。這里假設(shè)輸入數(shù)據(jù)是有符號(hào)8位數(shù),輸出數(shù)據(jù)也是有符號(hào)8位數(shù)。卷積在數(shù)字信號(hào)處理通常指的是兩個(gè)序列的逐元素乘積的和,也就是點(diǎn)乘。 module
    發(fā)表于 03-26 07:51

    Verilog 電子時(shí)鐘實(shí)現(xiàn)

    Verilog實(shí)現(xiàn)一個(gè)簡(jiǎn)單的電子時(shí)鐘,你可以使用一個(gè)計(jì)數(shù)器來(lái)周期性地遞增一個(gè)計(jì)數(shù)值,然后根據(jù)這個(gè)計(jì)數(shù)值來(lái)顯示時(shí)鐘的不同時(shí)刻。以下是一個(gè)簡(jiǎn)單的例子: module clock_display
    發(fā)表于 03-26 07:48

    verilog語(yǔ)音實(shí)現(xiàn)浮點(diǎn)運(yùn)算

    , mantissa} = a; // 將a的符號(hào)位、指數(shù)部分和尾數(shù)部分提取到對(duì)應(yīng)變量 end always @(posedge clk) begin if (reset ==
    發(fā)表于 03-25 21:49

    8位串口收發(fā)器verilog語(yǔ)言實(shí)現(xiàn)

    end // FSM state flip-flops always @ (posedge clk or negedge rst_n) begin if (!rst_n
    發(fā)表于 03-25 21:45

    新手入門(mén)的簡(jiǎn)單小例子-04-2 建模實(shí)現(xiàn)

    ; regbit_flag; reg [7:0]data_req; //對(duì)應(yīng)的1S計(jì)數(shù) always @(posedge clk or negedge rst_n) if( rst_n == 1
    發(fā)表于 03-17 14:29

    芯片中的clk引腳是什么意思

    Clk引腳在芯片中是時(shí)鐘信號(hào)的輸入引腳。時(shí)鐘信號(hào)在數(shù)字電路起著非常重要的作用,它用于同步芯片內(nèi)各個(gè)模塊的操作,確保它們按照正確的時(shí)間序列執(zhí)行任務(wù)。 時(shí)鐘信號(hào)的輸入通常由外部晶振或振蕩器提供,被接入
    的頭像 發(fā)表于 03-08 16:41 ?6114次閱讀

    veriloginput和output作用

    Verilog,input和output用于定義模塊的輸入和輸出端口。它們是用于通信的關(guān)鍵元素,定義了模塊與其它模塊之間的數(shù)據(jù)傳輸接口。通過(guò)input和output端口,模塊之間可以互相傳遞數(shù)據(jù)
    的頭像 發(fā)表于 02-23 10:29 ?2560次閱讀

    verilogfor循環(huán)是串行執(zhí)行還是并行執(zhí)行

    的for循環(huán)也是并行執(zhí)行的。 Verilog的for循環(huán)可以用來(lái)實(shí)現(xiàn)重復(fù)的操作,例如在一個(gè)時(shí)鐘周期中對(duì)多個(gè)電路進(jìn)行操作。在循環(huán)內(nèi)部,多個(gè)語(yǔ)句可以同時(shí)執(zhí)行,不受循環(huán)次數(shù)的限制。這種并行執(zhí)行的機(jī)制使得
    的頭像 發(fā)表于 02-22 16:06 ?2428次閱讀

    verilog function函數(shù)的用法

    Verilog 是一種硬件描述語(yǔ)言 (HDL),主要用于描述數(shù)字電子電路的行為和結(jié)構(gòu)。在 Verilog ,函數(shù) (Function) 是一種用于執(zhí)行特定任務(wù)并返回一個(gè)值的可重用代碼
    的頭像 發(fā)表于 02-22 15:49 ?4524次閱讀

    【每周一練】盤(pán)古1K開(kāi)發(fā)板 練習(xí)六:時(shí)鐘分頻器設(shè)計(jì)

    always @ (posedge clk or negedge rst_n )//posedgenegedge
    發(fā)表于 12-24 18:10

    #2023,你的 FPGA 年度關(guān)鍵詞是什么? # PWM模塊基礎(chǔ)設(shè)計(jì)

    模塊 reg [15:0] couter; always @(posedge clk or negedge rst) if( rst == 1\'b0 ) couter <= 0
    發(fā)表于 12-06 21:56