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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

verilog基础篇RAM IP核的使用

發布時間:2025/4/5 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 verilog基础篇RAM IP核的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.



在該頁面中,我們去掉了q output port(去掉輸出寄存器),并且添加了一個rden讀使能信號,所謂rden讀使能信號就是,當該信號為高電平時,我們才可以讀取RAM IP核中的數據。
其余的頁面我們使用默認設置即可,不要忘記勾選inst初始化模板文件。

//該代碼主要實現了先往RAM IP核中的0-31地址寫入0-31數據,
//每個地址對應一個數據,比如0地址對應0數據,1地址對應1數據,以此類推
//寫完了32個數據之后,我們在將RAM IP核中的0-31地址中的數據讀出
//當寫數據時,我們需要將寫使能信號拉高,當讀數據時,我們需要將讀使能信號拉高

//該代碼主要實現了先往RAM IP核中的0-31地址寫入0-31數據,
//每個地址對應一個數據,比如0地址對應0數據,1地址對應1數據,以此類推
//寫完了32個數據之后,我們在將RAM IP核中的0-31地址中的數據讀出
//當寫數據時,我們需要將寫使能信號拉高,當讀數據時,我們需要將讀使能信號拉高

module verilog_ip_RAM ( input clk_50M, input RST_N, /*RAM端口*/ output reg [4:0] address, //RAM的地址端口 output reg [7:0] wrdata, //RAM的寫數據端口 output [7:0] rddata, //RAM的讀數據端口 output reg [5:0] time_cnt, //計數器 output wren, //RAM的寫使能端口 output rden //RAM的讀使能端口 );//計數器 reg [5:0] time_cnt_n;//time_cnt的下一個狀態//RAM的地址端口 reg [4:0] address_n; //address的下一個狀態//RAM的寫數據端口 reg [7:0] wrdata_n; //wrdata的下一個狀態//時序邏輯電路,用來給time_cnt寄存器賦值 always @ (posedge clk_50M or negedge RST_N) begin if(!RST_N)time_cnt<=1'b0; elsetime_cnt<=time_cnt_n; end/*組合電路*/ always @ (*) beginif(time_cnt==6'd63)time_cnt_n=0;elsetime_cnt_n=time_cnt+1; end/*時序電路,用來給address寄存器賦值*/ always @ (negedge clk_50M or negedge RST_N) beginif(!RST_N)address<=1'b0;elseaddress<=address_n; end/*組合電路,用來生成RAM地址*/ always @ (*) beginif(address==5'd31)address_n=1'b0;elseaddress_n=address+1'b1; end/*組合電路,根據計數器用來生成RAM寫使能*/ assign wren = (time_cnt>=1'b0&&time_cnt<=5'd31)?1'b1:1'b0;/*時序電路,用來給wrdata寄存器賦值*/ always @ (negedge clk_50M or negedge RST_N) beginif(!RST_N)wrdata<=1'b0;elsewrdata<=wrdata_n; end/*組合電路,根據計數器用來生成寫入RAM的數據*/ always @ (*) beginif(time_cnt>=1'b0&&time_cnt<=5'd31)wrdata_n=time_cnt;elsewrdata_n=wrdata;end/*組合電路,根據計數器用來生成RAM讀使能*/ assign rden =(time_cnt>=6'd32&&time_cnt<=6'd63)?1'b1:1'b0;/*RAM IP核模塊*/RAM RAM_inst (.address ( address ), //RAM的地址端口.clock ( clk_50M ), //時鐘端口.data ( wrdata ),//RAM的寫數據端口.rden ( rden ), //RAM的讀使能端口.wren ( wren ), //RAM的寫使能端口.q ( rddata ) //RAM的讀數據端口);endmodule


寫數據如上圖所示
從圖中可以看到寫使能信號為高,讀使能信號為低時候,該操作就是往RAM IP核里面寫數據。
上升沿,數據生成由time_cnt生成,在下降沿進行寫數據,由上圖可以看到在地址30的時候,就寫入數據30,在地址31的時候,就寫入數據31.


讀數據如上圖所示
讀數據由于有一個寄存器的延時,在下降沿的地址遞增,在下一個上升沿輸出對應地址的數據。
也可以用signal tap II 調試觀察


總結

以上是生活随笔為你收集整理的verilog基础篇RAM IP核的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。