-
Notifications
You must be signed in to change notification settings - Fork 0
bram读写测试时序分析
minichao9901 edited this page Mar 3, 2024
·
3 revisions
`timescale 1ns / 1ps
module test_bram(
);
reg clka, clkb, rstn;
initial clka=0;
always #10 clka=~clka;
initial clkb=0;
always #20 clkb=~clkb;
initial begin
rstn=0;
#1000;
rstn=1;
end
reg [15:0] dina;
reg [7:0] addra;
reg wea;
wire [15:0] douta;
reg [15:0] dinb;
reg [7:0] addrb;
reg web;
wire [15:0] doutb;
initial begin
dina=16'h0000;
addra=8'h00;
wea=0;
wait(rstn==1);
# 1000;
repeat(256)
@(posedge clka) begin
#1;
wea=1;
addra=addra+1;
dina=dina+1;
end
wea=0;
end
initial begin
dinb=16'h0000;
addrb=8'hff;
web=0;
wait(addra>=128);
repeat(256)
@(posedge clkb) begin
#1;
addrb=addrb+1;
end
wea=0;
end
blk_mem_gen_0 your_instance_name (
.clka(clka), // input wire clka
.wea(wea), // input wire [0 : 0] wea
.addra(addra), // input wire [7 : 0] addra
.dina(dina), // input wire [15 : 0] dina
.douta(douta), // output wire [15 : 0] douta
.clkb(clkb), // input wire clkb
.web(web), // input wire [0 : 0] web
.addrb(addrb), // input wire [7 : 0] addrb
.dinb(dinb), // input wire [15 : 0] dinb
.doutb(doutb) // output wire [15 : 0] doutb
);
endmodule
![image](https://private-user-images.githubusercontent.com/61445559/309538609-7bf12239-bf9e-4e29-a3bd-39ed0969ed50.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDE1NTIsIm5iZiI6MTczOTIwMTI1MiwicGF0aCI6Ii82MTQ0NTU1OS8zMDk1Mzg2MDktN2JmMTIyMzktYmY5ZS00ZTI5LWEzYmQtMzllZDA5NjllZDUwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MjczMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJhMTNiZDdkZjJjMTQ1NjcxYmEyNWE2ZGZhOGMzMzBjMTU1MDdjOWVjOWJmNTk4ZTY2YTZkNWVhZGE2NTllM2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.PvIN3XRtC8SrG3na1lmHlRRiR1QIBhKQCHrUFtvkGps)
这里Operating Mode有3种:write first, read first, no change。 如果write first/read first模式,在写的时候,dout也会有输出。只要addr变化,dout就会变化。 如果no change,则写的时候,dout不会变化。这个是符合期望的。
![image](https://private-user-images.githubusercontent.com/61445559/309540183-36b98390-eeb9-4975-966c-ef0c0e6247fa.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDE1NTIsIm5iZiI6MTczOTIwMTI1MiwicGF0aCI6Ii82MTQ0NTU1OS8zMDk1NDAxODMtMzZiOTgzOTAtZWViOS00OTc1LTk2NmMtZWYwYzBlNjI0N2ZhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MjczMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTY4MzBjZjcyZTc5M2NhNzUwNzVkZDliOTFlZTU3YTExYzA3MzhhNWJkNTMzNmYyMzRkYjRjNmYxNWY3YmFmZDImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.O7fUDZpSvF3kaKM9W_zICU9a5h6x4SqlTCfCVAXAhJg)
如果2项都勾选,延迟3拍。如果只勾选1项,延迟2拍。如果都不勾选,延迟1拍。
![image](https://private-user-images.githubusercontent.com/61445559/309538867-00229e98-05ad-4a1c-bd84-7f9e93bbbb18.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDE1NTIsIm5iZiI6MTczOTIwMTI1MiwicGF0aCI6Ii82MTQ0NTU1OS8zMDk1Mzg4NjctMDAyMjllOTgtMDVhZC00YTFjLWJkODQtN2Y5ZTkzYmJiYjE4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MjczMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY2M2ZhZjYyZTIwMzkxOWRlNmI0YjBmYjYyNzA1MmJkOWJlMTNmNmUyM2U1N2RjYzVhZWFiNjYxYjQ1YjkwOTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.ACUWixqTDZvIWAJsGAnJ_qRiqo1_aBWo6uueFaXutnI)
![image](https://private-user-images.githubusercontent.com/61445559/309538934-4f7613ba-7b7d-4e0e-85df-13e9bd769311.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDE1NTIsIm5iZiI6MTczOTIwMTI1MiwicGF0aCI6Ii82MTQ0NTU1OS8zMDk1Mzg5MzQtNGY3NjEzYmEtN2I3ZC00ZTBlLTg1ZGYtMTNlOWJkNzY5MzExLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MjczMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU1ZmJiOWJjYTM4ZDEyMjQyYzAzOTExYmMwNGQ2YjA0ZmJjMWZmZDQ5OGQwYmE2YTU4NmI0ZWE3MWY2OWNjMjMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.sTfPCFfitfUyAYvtTAb4lihY44V79cgopMlsZVgO7LI)
写开始。可以看到,写的第1个地址是 0x01地址,写入的数据是0x0001。 也就是,0x00地址其实是没有写入的,是默认值。
![image](https://private-user-images.githubusercontent.com/61445559/309539027-46e51a2e-0833-4649-b754-f0391066b5be.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDE1NTIsIm5iZiI6MTczOTIwMTI1MiwicGF0aCI6Ii82MTQ0NTU1OS8zMDk1MzkwMjctNDZlNTFhMmUtMDgzMy00NjQ5LWI3NTQtZjAzOTEwNjZiNWJlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MjczMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM0MDA3M2I0NzQ5Zjg0ZTgzYzI5YzQ4MGEwODcxNjg3NmQ2ZTRhZGQ5OTI2MzhjZWI4ZDYwZDk2MWQxNTM2ZDgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Y4cxK3KyfObq8hkTbgverlrskJ3iHXHi54kVmn3HGao)
写结束。写入的最后一个数据,地址是0xff,写入的数据是0x00ff。
![image](https://private-user-images.githubusercontent.com/61445559/309539146-115b2fd8-cb33-43ff-9e59-08ea4a6f8a43.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDE1NTIsIm5iZiI6MTczOTIwMTI1MiwicGF0aCI6Ii82MTQ0NTU1OS8zMDk1MzkxNDYtMTE1YjJmZDgtY2IzMy00M2ZmLTllNTktMDhlYTRhNmY4YTQzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MjczMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAyMDdhOWQ0MjA5ZGIyOWNlNTkzZGJjMmVjZDM3MjU3YjI5YzI5NzhmYTBjMWE4ZDc4MDEyM2ExYzM3MTE4YmMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.2RZJTensfkmkZH22rgAZhAlnavclkrPM59Djrbas8LY)
读开始。由于读延迟2个cycle。可以看到读出的第一个数据是,地址是0x00,值是0x0000。这个地址内容不是写入的,是默认值。 读入的第二个数据,地址是0x01,值是0x0001。这个地址内容是写入的。
![image](https://private-user-images.githubusercontent.com/61445559/309539427-ee944db9-e7d8-4cbf-aafb-2cbee3e8ff44.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDE1NTIsIm5iZiI6MTczOTIwMTI1MiwicGF0aCI6Ii82MTQ0NTU1OS8zMDk1Mzk0MjctZWU5NDRkYjktZTdkOC00Y2JmLWFhZmItMmNiZWUzZThmZjQ0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MjczMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdkYzgxN2Y2N2Q3MWI0YzgxOWVkOWQ3OTRhMTgxMDRkMzRlMWMwYjQwZGY2Y2Q4MGIxZDdjMzEyZTE2ZTFiYjQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.zWH5ZR3SAth1fy6ZvTG2Q26jfo-Mv7LYH2EdvZzz0lk)
读结束。由于读延迟2个cycle。可以看到读的最后一个数据,地址是0xff,值是0x00ff。
![image](https://private-user-images.githubusercontent.com/61445559/309541082-447d8ac3-5c28-4973-a917-61513b8a5cf5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDE1NTIsIm5iZiI6MTczOTIwMTI1MiwicGF0aCI6Ii82MTQ0NTU1OS8zMDk1NDEwODItNDQ3ZDhhYzMtNWMyOC00OTczLWE5MTctNjE1MTNiOGE1Y2Y1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MjczMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTIzNGUyMzAwNGM3ZjM4NjI5ZDk3MWIxMWFhNmY3MTQwODRiYjY2YjU4YTFiYzMzNGZiNDY0MDM5MDc5Mzg3YzgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.TOkF-w9m0feTywrqigpka8SU0mgSPDPfpGXn86IYMqM)
读开始
![image](https://private-user-images.githubusercontent.com/61445559/309541131-222ff474-9cb5-472b-9d56-ab37d4eb2a37.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDE1NTIsIm5iZiI6MTczOTIwMTI1MiwicGF0aCI6Ii82MTQ0NTU1OS8zMDk1NDExMzEtMjIyZmY0NzQtOWNiNS00NzJiLTlkNTYtYWIzN2Q0ZWIyYTM3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MjczMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE2MTcxYzQ5YWJlZWI2MDMzMjYwYTZjZWYzMDBlMDAyNzhmM2RlYzZmMzIyNmNmNzIyMjk0ZGRjZjJmOGRhOTYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.WlthPtMllGMoPFsx1fzbh7QCGXTQPBPOR_su_ZRGI2E)
读结束
可以看到,结果确实是延一拍输出。
- 在数字电路中,所谓的延迟一拍输出,其实就是DFF输出。它就是:在时钟的上升沿,立即输出。
- 延迟2拍输出,就是DFF+DFF输出。它就是,在时钟的上升沿不输出,再到下个上升沿输出。
![image](https://private-user-images.githubusercontent.com/61445559/309541479-34851a91-cac6-4ed1-9cf3-46758f7d563c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDE1NTIsIm5iZiI6MTczOTIwMTI1MiwicGF0aCI6Ii82MTQ0NTU1OS8zMDk1NDE0NzktMzQ4NTFhOTEtY2FjNi00ZWQxLTljZjMtNDY3NThmN2Q1NjNjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MjczMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFiYThiNDE5Y2Y4Zjc4MDk1Y2RjZjhhOWRlYTMxYjliNmMwMmQyZDM5ODBhNTE3MGQwZDdmNzFlZDY3M2NlNGEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.PuQpz7ki6nZAUIii5VF945tKXan_X3jDbDdeDCMdEJM)