在該頁面中,我們去掉了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;
else
time_cnt<=time_cnt_n;
end/*組合電路*/
always @ (*)
begin
if(time_cnt==6'd63)
time_cnt_n=0;
else
time_cnt_n=time_cnt+1;
end/*時序電路,用來給address暫存器賦值*/
always @ (negedge clk_50m or negedge rst_n)
begin
if(!rst_n)
address<=1'b0;
else
address<=address_n;
end/*組合電路,用來生成ram位址*/
always @ (*)
begin
if(address==5'd31)
address_n=1'b0;
else
address_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)
begin
if(!rst_n)
wrdata<=1'b0;
else
wrdata<=wrdata_n;
end/*組合電路,根據計數器用來生成寫入ram的資料*/
always @ (*)
begin
if(time_cnt>=1'b0&&time_cnt<=5'd31)
wrdata_n=time_cnt;
else
wrdata_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的讀資料埠
寫資料如上圖所示從圖中可以看到寫使能訊號為高,讀使能訊號為低時候,該操作就是往ram ip核裡面寫資料。
在上公升沿,資料生成由time_cnt生成,在下降沿進行寫資料,由上圖可以看到在位址30的時候,就寫入資料30,在位址31的時候,就寫入資料31.
讀資料如上圖所示
verilog基礎語法
模組例項化 也稱模組呼叫 基本格式為 模組名 例化名 埠列表 根據被呼叫的低層模組與上層模組的連線埠的描述方式不同,有兩種例項化方法 按埠順序連線 低層模組定義時宣告的埠順序與上層模組相應的連線埠順序保持一致。格式 模組名 例化名 port 1,port n 按埠名稱連線,被呼叫的低層模組和上層模組...
Verilog篇 二 系統函式
顯示任務 display,write,前者總會輸出乙個換行符,後者不會。固定輸出格式版 displayb displayo displayh writeb writeo writeh。只是固定預設的輸出格式,也可以通過 0x執行輸出方式。m 顯示模組路徑,轉義字元 p 可以直接列印出,enum,st...
verilog 基礎語法一
一 過程快包括 always 塊和 initial 塊 連續賦值語句 assign 連續賦值語句常用來描述組合邏輯 always 塊既可描述組合也可時序 內部順序執行,兩個塊並行執行 由多個電平觸發always塊時,只要其中乙個發生變化,都會執行一次程過程塊 所有塊和賦值連續賦值語句都是並行執行 二...