電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 59|回復(fù): 0
收起左側(cè)

【芯片設(shè)計(jì)】異步電路碎碎念(七)多比特DMUX同步器

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
匿名  發(fā)表于 2024-10-8 12:07:00 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
上一篇寫了幾個(gè)簡(jiǎn)單的打拍同步器,這一篇看下帶有使能信號(hào)的多比特同步結(jié)構(gòu)——DMUX同步器。
DMUX的典型結(jié)構(gòu)是這樣的:

其遵循的原則就是,數(shù)據(jù)不同步只對(duì)控制信號(hào)同步,這點(diǎn)其實(shí)和異步fifo里的思路一樣,只不過異步fifo中的控制信號(hào)是多比特的格雷碼,而這個(gè)場(chǎng)景下的控制信號(hào)是in_vld。繼續(xù)觀察結(jié)構(gòu)可以發(fā)現(xiàn),DMUX是將控制信號(hào)同步之后,在目的時(shí)鐘域獲取了控制信號(hào)的上升沿,以上升沿為使能信號(hào)采樣數(shù)據(jù)。因此使用這個(gè)結(jié)構(gòu)需要滿足若干的要求:
1.數(shù)據(jù)和使能信號(hào)在源時(shí)鐘域?yàn)橥降絹淼男盘?hào);
2.使能信號(hào)需要維持一段時(shí)間(目的時(shí)鐘兩拍),確保同步器能夠穩(wěn)定采樣;
3.在目的時(shí)鐘域?qū)?shù)據(jù)完成采樣前,數(shù)據(jù)信號(hào)不能跳變;
如果不滿足以上的要求,那么就可能造成數(shù)據(jù)漏同步、錯(cuò)同步等問題。接下來,完成代碼,接口改了下名字和其他模塊統(tǒng)一:
module async_nbit_dmux #(
  parameter DL = 2,
  parameter WD = 1,
  parameter FF = 1
)( /*AUTOARG*/
   // Outputs
   o_data, o_en,
   // Inputs
   i_clk, i_rst_n, i_data, i_en, o_clk, o_rst_n
   );
// ----------------------------------------------------------------
// Interface declare
// ----------------------------------------------------------------
input          i_clk;
input          i_rst_n;
input [WD -1:0]i_data;
input          i_en;
input          o_clk;
input          o_rst_n;
output[WD -1:0]o_data;
output         o_en;入口處仍舊可以選擇是否需要打拍后再進(jìn)行同步操作:
// ----------------------------------------------------------------
// i_data dff
// ----------------------------------------------------------------
wire [WD -1:0]i_data_in;
wire          i_en_in;
generate
  if(FF == 0)begin: NO_IN_DFF
    assign i_data_in = i_data;
    assign i_en_in   = i_en;
  end //if(FF == 0)begin: NO_IN_DFF
  else begin: IN_DFF
    reg [WD -1:0]i_data_ff;
    reg          i_en_ff;
    always @(posedge i_clk or negedge i_rst_n) begin
      if(!i_rst_n)begin
        i_data_ff 而后將控制信號(hào)同步到目的時(shí)鐘域,并捕捉其上升沿:
// ----------------------------------------------------------------
// i_en_in async
// ----------------------------------------------------------------
wire i_en_sync;
reg  i_en_sync_ff;
wire i_en_sync_pulse;
reg  i_en_sync_pulse_ff;
async_1bit_delay #(.DL(DL), .FF(0))
u_i_en_sync(
  .i_clk    (i_clk),
  .i_rst_n  (i_rst_n),
  .i_data   (i_en_in),
  .o_clk    (o_clk),
  .o_rst_n  (o_rst_n),
  .o_data   (i_en_sync)
);
always @(posedge o_clk or negedge o_rst_n) begin
  if(!o_rst_n)
    i_en_sync_ff 通過目的上升沿對(duì)數(shù)據(jù)進(jìn)行采樣,并輸出結(jié)果:
// ----------------------------------------------------------------
// i_data_in sample
// ----------------------------------------------------------------
reg [WD -1:0]i_data_sync;
always @(posedge o_clk or negedge o_rst_n) begin
  if(!o_rst_n)
    i_data_sync 最后是仿真波形:


系列文章入口——
【芯片設(shè)計(jì)】SoC 101(一):緒論
【芯片設(shè)計(jì)】FIFO漫談(零)從無處不在的FIFO開始說起
【芯片設(shè)計(jì)】計(jì)算機(jī)體系結(jié)構(gòu)(一)虛擬內(nèi)存
【芯片設(shè)計(jì)】深入理解AMBA總線(零)緒論
【芯片設(shè)計(jì)】握手協(xié)議的介紹與時(shí)序說明
【芯片設(shè)計(jì)】復(fù)位那些小事 —— 復(fù)位消抖
【芯片設(shè)計(jì)】快速入門數(shù)字芯片設(shè)計(jì)(一)Introduction
【芯片驗(yàn)證】UVM源碼計(jì)劃(零)下定決心讀源碼前的自測(cè)環(huán)節(jié)
【芯片設(shè)計(jì)】異步電路碎碎念(一) 到底什么是異步電路
【芯片設(shè)計(jì)】從RTL到GDS(一):Introduction
其他文章鏈接——
【芯片驗(yàn)證】sva_assertion: 15道助力飛升的斷言練習(xí)
【芯片驗(yàn)證】可能是RTL定向驗(yàn)證的巔峰之作
【芯片驗(yàn)證】RTL仿真中X態(tài)行為的傳播 —— 從xprop說起
【芯片驗(yàn)證】年輕人的第一個(gè)systemVerilog驗(yàn)證環(huán)境全工程與解析
【芯片設(shè)計(jì)】verilog中有符號(hào)數(shù)和無符號(hào)數(shù)的本質(zhì)探究
【芯片設(shè)計(jì)】論RTL中always語法的消失術(shù)
【芯片設(shè)計(jì)】代碼即注釋,注釋即代碼
【芯片設(shè)計(jì)】700行代碼的risc處理器你確實(shí)不能要求太多了
入職芯片開發(fā)部門后,每天摸魚之外的時(shí)間我們要做些什么呢
如何計(jì)算系統(tǒng)的outstanding 和 burst length?
芯片搬磚日!け扑缽(qiáng)迫癥的關(guān)鍵詞不對(duì)齊事件
熟人社會(huì)里,一群沒有社會(huì)價(jià)值的局外人

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有賬號(hào)?立即注冊(cè)

x
回復(fù)

使用道具

發(fā)表回復(fù)

本版積分規(guī)則

關(guān)閉

站長(zhǎng)推薦上一條 /1 下一條


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表