日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

fifo的rdata_同步FIFO设计

發(fā)布時(shí)間:2024/9/27 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fifo的rdata_同步FIFO设计 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文從微信公眾號(hào)--數(shù)字IC小站,?轉(zhuǎn)載,歡迎關(guān)注,微信公眾號(hào)更新更多更快帶選通信號(hào)的同步FIFO(重發(fā))?mp.weixin.qq.com

?我們常見(jiàn)的同步FIFO一般都是固定位寬輸入,固定位寬輸出的,因此他們之間的關(guān)系一般來(lái)說(shuō)都是固定的,比較容易理解,網(wǎng)上也有很多類似的代碼去指導(dǎo)怎么編寫,在此不再贅述。如果突發(fā)奇想,添加一個(gè)選通信號(hào)wstrb呢?那么這個(gè)世界是不是就不太一樣了呀~~

假設(shè)題目如下:

編寫代碼,實(shí)現(xiàn)如下的同步FIFO功能,示意圖如下:

其中,clock為輸入時(shí)鐘;reset_n為復(fù)位信號(hào),低有效;valid_in為輸入有效信號(hào),當(dāng)輸入信號(hào)為無(wú)效信號(hào)時(shí),數(shù)據(jù)不寫進(jìn)FIFO;wstrb為選通信號(hào),當(dāng)其為0時(shí),輸入數(shù)據(jù)的低8位有效,當(dāng)其為1時(shí),輸入數(shù)據(jù)的低16位有效,當(dāng)其為2時(shí),輸入數(shù)據(jù)的低32位有效,當(dāng)其為3時(shí),輸入數(shù)據(jù)全部有效;data_in為輸入數(shù)據(jù),每次數(shù)據(jù)為64位;valid_out為輸出有效信號(hào);ready_in為FIFO狀態(tài)信號(hào),當(dāng)為高時(shí),證明FIFO內(nèi)部有足夠的空間存儲(chǔ)數(shù)據(jù);data_out為輸出數(shù)據(jù),32位寬。

上次把類似的題目給同學(xué)們作為實(shí)驗(yàn)題,交上來(lái)的作業(yè)發(fā)現(xiàn)有很多bug,下次講講bug~

解題思路如下:

因?yàn)檩斎肟赡苁?位,也可能是16位,32位,64位有效,而輸出永遠(yuǎn)都是32位的,那么我們把fifo寬度定義為8位,深度定義為32位。從實(shí)際情況出發(fā),假設(shè)每當(dāng)數(shù)據(jù)存儲(chǔ)大于24byte時(shí),發(fā)送ready_in為0信號(hào);每當(dāng)fifo中數(shù)據(jù)大于4byte時(shí),就立即取出;每個(gè)時(shí)鐘存儲(chǔ)的數(shù)據(jù),至少等待一個(gè)時(shí)鐘周期才能取出,不能同時(shí)刻取出...

最簡(jiǎn)單的方法是使用sv編寫,因?yàn)閟v中有quene,完美解決了Verilog需要讀寫指針或者計(jì)數(shù)器等問(wèn)題,請(qǐng)注意,這種寫法是不可綜合的,可作為Testbench中的reference model 使用。

參考代碼如下所示:(本次僅給出SV代碼,下次給可綜合的RTL代碼,代碼僅供參考,不保證沒(méi)bug,有問(wèn)題歡迎交流~)

`timescale 1ns / 100ps

?

//******************************************************************

?

// Author:SJTU_chen

// Date: 2019/10/26

// Version: v1.0

// Module Name: fifo-systemverilog

// Project Name: SystemVerilog Lab1

?

//*******************************************************************

?

module fifo_ref(

clock, reset_n, valid_in,wstrb,data_in,valid_out,ready_in,data_out

);

?

?

input clock;

input reset_n;

input valid_in;

input [1:0] wstrb;

input [63:0] data_in;

?

output [31:0] data_out;

output valid_out;

output ready_in;

?

logic [31:0] data_out;

logic valid_out;

logic ready_in;

logic [7:0] stack [$];

always@(posedge clock or negedge reset_n)

begin

if(!reset_n)

begin

stack.delete();

end

else if (valid_in&&ready_in) begin

casex (wstrb)

2'b00:

begin

stack.push_back(data_in[7:0]);

end

?

2'b01:

begin

stack.push_back(data_in[7:0]);

stack.push_back(data_in[15:8]);

end

?

2'b10:

begin

stack.push_back(data_in[7:0]);

stack.push_back(data_in[15:8]);

stack.push_back(data_in[23:16]);

stack.push_back(data_in[31:24]);

end

?

2'b11:

begin

stack.push_back(data_in[7:0]);

stack.push_back(data_in[15:8]);

stack.push_back(data_in[23:16]);

stack.push_back(data_in[31:24]);

stack.push_back(data_in[39:32]);

stack.push_back(data_in[47:40]);

stack.push_back(data_in[55:48]);

stack.push_back(data_in[63:56]);

end

endcase

end

end

?

always@(posedge clock or negedge reset_n)

begin

if(!reset_n)

begin

data_out <=32'b0;

valid_out <='0;

end

else if(wstrb==3&&valid_in==1&&stack.size>11)

fork

valid_out <= '1;

begin

data_out[7:0] =stack.pop_front;

data_out[15:8] =stack.pop_front;

data_out[23:16]=stack.pop_front;

data_out[31:24]=stack.pop_front;

end

join

else if(wstrb==2&&valid_in==1&&stack.size>7)

fork

valid_out <= '1;

begin

data_out[7:0] =stack.pop_front;

data_out[15:8] =stack.pop_front;

data_out[23:16]=stack.pop_front;

data_out[31:24]=stack.pop_front;

end

join

else if(wstrb==1&&valid_in==1&&stack.size>5)

fork

valid_out <= '1;

begin

data_out[7:0] =stack.pop_front;

data_out[15:8] =stack.pop_front;

data_out[23:16]=stack.pop_front;

data_out[31:24]=stack.pop_front;

end

join

else if(wstrb==0&&valid_in==1&&stack.size>4)

fork

valid_out <= '1;

begin

data_out[7:0] =stack.pop_front;

data_out[15:8] =stack.pop_front;

data_out[23:16]=stack.pop_front;

data_out[31:24]=stack.pop_front;

end

join

else if(valid_in==0&&stack.size>=4)

fork

valid_out <= '1;

begin

data_out[7:0] =stack.pop_front;

data_out[15:8] =stack.pop_front;

data_out[23:16]=stack.pop_front;

data_out[31:24]=stack.pop_front;

end

join

else

begin

valid_out <='0;

end

end

?

assign ready_in=(stack.size<=24);

endmodule

總結(jié)

以上是生活随笔為你收集整理的fifo的rdata_同步FIFO设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天夜夜人人 | 中文字字幕在线中文 | 国产欧美第一页 | 黄色av观看 | 18禁裸男晨勃露j毛免费观看 | 另类小说婷婷 | 制服丝袜天堂 | 欧美国产精品一区 | 日日操天天操夜夜操 | 图片区小说区视频区 | 国产全肉乱妇杂乱视频 | 疯狂撞击丝袜人妻 | 久久久久久久久久网站 | 欧洲午夜视频 | 青青草视频在线免费观看 | 一区三区视频 | 大地资源高清播放在线观看 | 亚洲成人一区二区 | 东京热毛片 | 亚洲图片偷拍区 | 精品久久久久久一区二区里番 | 内射无码专区久久亚洲 | 欧美在线性 | 一级看片免费视频 | 三点尽露的大尺度国产 | 国产又黄又爽视频 | 久久久无码一区二区三区 | 国产视频一区二 | 天天射av| www.男女| 99久久久国产精品无码网爆 | 亚洲在线免费看 | 鲁一鲁一鲁一鲁一av | 少妇xxxx | 麻豆毛片| ass日本粉嫩pics珍品 | 丁香九月激情 | 丁香av| 国产精品探花一区二区三区 | 69视频国产 | 男女啪啪毛片 | 久久精品视频1 | 日韩三级网 | 黄色免费看片 | 日韩av电影网 | 成人资源站 | 人人爽人人爽人人爽 | 香蕉视频成人在线观看 | 波多野结衣精品在线 | 国产午夜精品久久 | 中国少妇做爰全过程毛片 | 91极品在线 | 九色国产在线 | 亚洲美女一级片 | 末路1997全集免费观看完整版 | 亚洲视频99 | 给我看免费高清在线观看 | 大香伊人中文字幕精品 | 深爱五月激情五月 | 欧美精品在线免费 | 日韩av在线播放网址 | jizz黑人 | 亚洲人成电影在线播放 | 日本天堂一区 | 日本一区二区免费高清视频 | 国产精品yy | 91黄色在线视频 | 中文字幕日韩欧美在线 | 久操视频在线播放 | 美女被男生免费视频 | www,色 | 蜜乳av中文字幕 | 色悠悠国产精品 | 91av在| 亚洲一区二区三区蜜桃 | 原来神马电影免费高清完整版动漫 | 亚洲黄色小说网 | 久久久久久97 | 久久久这里有精品 | xxxxx在线视频 | 亚洲熟女乱色综合亚洲av | 日韩中文在线观看 | 日韩一区二区视频在线播放 | 波多野结衣免费看 | 一区二区在线不卡 | 蜜桃精品视频 | 欧美资源 | 中文一区二区在线观看 | 国产真人做爰视频免费 | 欧美成人精品激情在线观看 | 欧美日韩资源 | 久久国产精品首页 | 成人综合婷婷国产精品久久 | 日韩一区二区三区精 | 色图在线观看 | 国产aaa大片 | 亚洲午夜精品福利 | 三级性生活视频 | 人妻精油按摩bd高清中文字幕 |