在進行模塊設(shè)計時,我們經(jīng)常需要進行數(shù)據(jù)位寬的轉(zhuǎn)換,常見的兩種轉(zhuǎn)換場景有同步時鐘域位寬轉(zhuǎn)換和異步時鐘域位寬轉(zhuǎn)換。本文將介紹異步時鐘域位寬轉(zhuǎn)換 異步時鐘域的位寬轉(zhuǎn)換讀時鐘和寫時鐘屬于兩個時鐘。如下案例中,數(shù)據(jù)位寬由32bit轉(zhuǎn)40bit,寫時鐘頻率156.25MHz,讀時鐘頻率125Mhz,寫數(shù)據(jù)為32bit,讀數(shù)據(jù)位寬為40bit,通過計算得到入口數(shù)據(jù)速率和出口數(shù)據(jù)速率保持一致(156.25*32==40*125)。存儲模塊是由寄存器搭建的。那么需要多大存儲模塊呢?32和40的最小公倍數(shù)為160,極限場景下,只需要160bit的寄存器作為存儲就夠了,但是讀操作通常晚于寫操作,并且考慮到時鐘有抖動有偏移,為了避免溢出,稍微增加一部分緩存,我們可以采用320bit作為存儲模塊。因此寫側(cè)32bit寫10次,讀側(cè)40bit讀8次,讀寫兩側(cè)所需的時間相等。注意事項:寫地址(wr_addr)跳轉(zhuǎn)范圍是0~9,讀地址(rd_addr)跳轉(zhuǎn)范圍0~7。
如圖所示:buff_array為320bit的數(shù)據(jù)存儲。vld_array為80bit的有效標志位存儲:vld_array[n]為1表示buff_array[4n+3:4n]存在4bit的有效數(shù)據(jù)。
always @(posedge wr_clk or negedge wr_rst_n) begin
if (~wr_rst_n) begin
buff_array <= {DATA_FIFO_DEPTH{1'b0}};
vld_array <= {VALID_FIFO_DEPTH{1'b0}};
end else begin
if (wr_en) begin
buff_array[ wr_addr*32 +: 32] <= wr_data_i;
vld_array[wr_addr*8 +: 8] <= {8{wr_valid_i}};
end
end
end
reg [10-1:0] rd_valid_bus;
reg [40-1:0] rd_data_bus;
always @(*) begin
rd_data_bus[40-1:0] = buff_array[ rd_addr*40 +: 40];
rd_valid_bus[10-1:0] = vld_array[rd_addr*10 +: 10];
end
integer i;
reg [40-1:0] rd_data_valid_mask;
always @(*) begin
for(i = 0; i < 40; i = i + 1) begin
rd_data_valid_mask[i] = rd_valid_bus[i/4];
end
end
always @(posedge rd_clk or negedge rd_rst_n) begin
if (~rd_rst_n) begin
rd_data_o <= {40{1'b0}};
rd_valid_o <= 1'b0;
end else begin
if (rd_en) begin
rd_data_o <= rd_data_bus & rd_data_valid_mask;
rd_valid_o <= |rd_valid_bus;
end else begin
rd_data_o <= {40{1'b0}};
rd_valid_o <= 1'b0;
end
end
end
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
寄存器
+關(guān)注
關(guān)注
31文章
5317瀏覽量
120008 -
RAM
+關(guān)注
關(guān)注
8文章
1367瀏覽量
114531 -
存儲模塊
+關(guān)注
關(guān)注
0文章
14瀏覽量
8884
原文標題:IC設(shè)計:ram的應(yīng)用 - 位寬轉(zhuǎn)換
文章出處:【微信號:IP與SoC設(shè)計,微信公眾號:IP與SoC設(shè)計】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
IC設(shè)計:ram的應(yīng)用-異步時鐘域位寬轉(zhuǎn)換
在進行模塊設(shè)計時,我們經(jīng)常需要進行數(shù)據(jù)位寬的轉(zhuǎn)換,常見的兩種轉(zhuǎn)換場景有同步時鐘域位寬
請推薦反激有源鉗位的IC
請TI工程師推反激有源鉗位的IC,主要應(yīng)用在DC-DC電源上,因寬電壓輸入9-36V范圍,若用正激有源鉗位的話二次側(cè)續(xù)流管會是比較難處理的問題,加之體積小,所以想用反激有源鉗
發(fā)表于 07-05 11:51
Ultrascale器件中如何將字節(jié)寬寫入啟用轉(zhuǎn)換為位wibe寫入enalbe?
大家好, 在Ultrascale器件中,RAM具有字節(jié)寬寫入使能,但我想要Bit Wide Write Enable,所以 如何將字節(jié)寬寫入啟用轉(zhuǎn)換為
發(fā)表于 04-26 13:53
在SpinalHDL里有沒有什么好的方式實現(xiàn)一個接口位寬轉(zhuǎn)換呢
。熟悉數(shù)字邏輯電路的小伙伴想必都不陌生,其本質(zhì)上是一個接口位寬轉(zhuǎn)換,在實現(xiàn)時無非用位寬轉(zhuǎn)換FIF
發(fā)表于 07-27 14:52
顯卡的顯存位寬
顯卡的顯存位寬 顯存位寬是顯存在一個時鐘周期內(nèi)所能傳送數(shù)據(jù)的位數(shù),位數(shù)越大則瞬間所能傳輸?shù)臄?shù)
發(fā)表于 12-25 10:53
?340次閱讀
不用D-A轉(zhuǎn)換器IC的8位廉價D-A轉(zhuǎn)換電路
不用D-A轉(zhuǎn)換器IC的8位廉價D-A轉(zhuǎn)換電路
電路的功能
聲音合成輸出用的D
發(fā)表于 05-07 15:05
?1068次閱讀
采用乘法D-A轉(zhuǎn)換器IC的廉價8位D-A轉(zhuǎn)換器
采用乘法D-A轉(zhuǎn)換器IC的廉價8位D-A轉(zhuǎn)換器
電路的功能
8位D-A轉(zhuǎn)換器的
發(fā)表于 05-07 15:18
?899次閱讀
TANDY WP 2 RAM IC卡開源分享
電子發(fā)燒友網(wǎng)站提供《TANDY WP 2 RAM IC卡開源分享.zip》資料免費下載
發(fā)表于 07-15 14:31
?0次下載
評論