RF4x8模块硬件描述
基本功能描述:
- 读写全双工。写入数据需要①拉高一位使能信号en_wr并②给定地址Addr_wr和③数据Data_wr;读取数据需要给定地址Addr_rd_X,并支持两路读取(X=A/B)。
- 数据位宽:8bit;地址位宽:4bit,地址总数2^4=16个。即本RF4x8中可以存放16个8bit数据。
- 时序:clk上升沿检测钟控;rst下降沿检测,异步复位。

1 | module RF4x8 #( parameter |
RF4x8仿真分析
仿真模块RF4x8_tb
1 |
|
仿真结果时序分析
- 40ns,60ns,80ns,100ns时写数据:拉高写使能信号en_wr,分别向地址0000,0001,1100和1111写入数据10010011,11110000,00001011和01001111。写地址和写数据信号分别在50ns,70ns,90ns和110ns时刻的clk上升沿被捕捉到。
- 120ns时读数据:给出A/B端口读数据地址0000和0000,并在130ns的clk上升沿被捕捉(图1中粉色虚线所在位置),Data_rd_A/Data_rd_B分别读取到地址0000处的数据10010011。
- 130ns时读数据:改变B端口读地址为0001,在140ns的clk上升沿被捕捉,Data_rd_B读取到地址0001处的数据11110000。
- 260ns时发生复位:rst被拉低(图2中黄色实线所在位置),此时再读地址0101的数据,发现被重置为00000000。


注:
- 本测试例中,读地址给出后需要等待半个时钟周期才能读出数据,这是因为读地址信号刚好和clk错开(读地址信号给出时正好是clk下降沿),需要等待clk到达上升沿才能捕捉到读地址信号。如果读写信号再延时半个时钟周期,那么不会出现这样的情况。
- 关于写使能信号en_wr:虽然支持读写双工,但在读数据时最好要把en_wr拉低。否则当RF与其他模块级联时,可能会导致RF在被读的同时被写入不正确的数据,这在后面的RF_ALU级联测试中会提到。