单口ram和爽口ram verilog代码
时间: 2023-11-03 13:06:44 浏览: 80
verilog 代码
由于单口RAM和双口RAM的Verilog代码实现有所不同,所以我将为您提供这两种RAM的代码。
单口RAM:
module single_port_RAM
(
input clk, // 时钟信号
input write_en, // 写使能信号
input [7:0] addr, // 地址信号
input [7:0] data_in,// 输入数据信号
output [7:0] data_out// 输出数据信号
);
reg [7:0] mem [0:255]; // 256个8位字节的内存
always @(posedge clk) begin
if (write_en) begin // 写使能信号为高时,将数据写入内存中
mem[addr] <= data_in;
end
end
assign data_out = mem[addr]; // 输出数据信号为对应地址上的数据
endmodule
爽口RAM:
module dual_port_RAM
(
input clk, // 时钟信号
input [7:0] addr_A, // A端地址信号
input [7:0] addr_B, // B端地址信号
input [7:0] data_in_A,// A端输入数据信号
input [7:0] data_in_B,// B端输入数据信号
input write_en_A, // A端写使能信号
input write_en_B, // B端写使能信号
output reg [7:0] data_out_A, // A端输出数据信号
output reg [7:0] data_out_B // B端输出数据信号
);
reg [7:0] mem [0:255]; // 256个8位字节的内存
always @(posedge clk) begin
if (write_en_A) begin // A端写使能信号为高时,将数据写入内存中
mem[addr_A] <= data_in_A;
end
if (write_en_B) begin // B端写使能信号为高时,将数据写入内存中
mem[addr_B] <= data_in_B;
end
end
always @(addr_A or addr_B) begin
data_out_A <= mem[addr_A]; // A端输出数据信号为对应地址上的数据
data_out_B <= mem[addr_B]; // B端输出数据信号为对应地址上的数据
end
endmodule
阅读全文