網(wǎng)站二次開發(fā)是什么意思seo優(yōu)化團隊
??途W(wǎng)Verilog刷題——VL54
- 題目
- 答案
題目
??實現(xiàn)一個深度為8,位寬為4bit的雙端口RAM,數(shù)據(jù)全部初始化為0000。具有兩組端口,分別用于讀數(shù)據(jù)和寫數(shù)據(jù),讀寫操作可以同時進行。當讀數(shù)據(jù)指示信號read_en有效時,通過讀地址信號read_addr讀取相應位置的數(shù)據(jù)read_data,并輸出;當寫數(shù)據(jù)指示信號write_en有效時,通過寫地址信號write_addr 和寫數(shù)據(jù)write_data,向?qū)恢脤懭胂鄳臄?shù)據(jù)。
??模塊的信號接口圖如下:
??模塊的時序圖如下:
??輸入輸出描述。
信號 | 類型 | 輸入/輸出 | 位寬 | 描述 |
---|---|---|---|---|
clk | wire | Input | 1 | 系統(tǒng)時鐘信號 |
rst_n | wire | Input | 1 | 異步復位信號,低電平有效 |
read_en | wire | Input | 1 | 讀使能信號,高電平表示進行讀操作 |
write_en | wire | Input | 1 | 寫使能信號,高電平表示進行寫操作 |
read_addr | wire | Input | 8 | 讀地址 |
write_addr | wire | Input | 8 | 寫地址 |
write_data | wire | Input | 4 | 寫數(shù)據(jù),在寫使能信號拉高時,同時輸入寫數(shù)據(jù) |
read_data | reg | Output | 4 | 讀數(shù)據(jù) |
答案
??在題目中,并未指出數(shù)據(jù)的讀寫操作是同步的還是異步的,從題目中給出的時序圖看,題目要求在讀使能有效的該時鐘內(nèi)讀出數(shù)據(jù),比如在讀使能read_en有效時,地址為0,立刻讀出地址0中的數(shù)據(jù)1,地址為1,則立刻讀出地址1中的數(shù)據(jù)2,可見時序圖要求的是異步讀,但是在程序中,我們設(shè)置為同步讀,仿真也是通過的(個人覺得題目有問題,沒有指出讀寫是同步還是異步,仿真也有問題)。
`timescale 1ns/1ns
module ram_mod(input clk,input rst_n,input write_en,input [7:0]write_addr,input [3:0]write_data,input read_en,input [7:0]read_addr,output reg [3:0]read_data
);
integer i;
reg [3:0] mem [255:0];//寫操作
always @(posedge clk or negedge rst_n)if(!rst_n)for(i=0;i<256;i=i+1) beginmem[i] <= 'd0;endelse if(write_en)mem[write_addr] <= write_data;//同步讀操作
always @(posedge clk or negedge rst_n) if(!rst_n)read_data <= 'd0;else if(read_en)read_data <= mem[read_addr];elseread_data <= 'd0;//異步讀操作
/*
always @(*) if(read_en)read_data = mem[read_addr];elseread_data = 'd0;
*/endmodule