module rom_1k_8b( addr, din, RW,CS, clk, dout );
input [9:0] addr;
input [7:0] din;
input RW; //写允许
input clk;
input CS; //片选
output [7:0] dout;
reg [7:0] mem[1023:0];//1024个,8位
always @(posedge clk)
begin
if (RW==1 && CS==1)
mem[addr] <= din;
end // end always
assign dout =(CS==1)? mem[addr]:8'bzzzzzzzz;
endmodule
module rom_2k_8b(addr,din,RW,CS,clk,dout);
input [10:0] addr;
input [7:0] din;
input RW;
input clk;
input CS;
output [7:0] dout;
wire CS0,CS1;
wire [7:0] dout1,dout0;
assign CS0=CS&addr[10];
assign CS1=~addr[10]&CS;
rom_1k_8b uO(.addr(addr[9:0]),.din(din),.RW(RW),.CS(CSO),.clk(clk),.dout(dout0));
rom_1k_8b u1(.addr(addr[9:0]),.din(din),.RW(RW),.CS(CS1),.clk(clk),.dout(dout1));
assign dout=addr[10]?dout1:dout0;
endmodule
module rom_2k_8b_tb(
);
reg [9:0] addr;
reg [7:0] din;
reg RW,CS, clk;
wire [7:0] dout;
rom_2k_8b u0(addr, din, RW,CS, clk, dout);
initial
begin
addr=11'b0000000000;din=8'b11000001;RW=1'b1;CS=1'b1;clk=0;
#50
RW=1'b0;
#20
din=8'b11111111;
#100
addr=11'b1000000001;din=8'b11111011;RW=1'b1;
#100
RW=1'b0;addr=11'b1000000000;
#30
addr=11'b0000000000;
#200
CS=1'b0;
end
always #10 clk=~clk;
endmodule