-
Notifications
You must be signed in to change notification settings - Fork 0
vivado操作技巧
https://blog.csdn.net/qq_34895681/article/details/129889977
- 首先,把要生成例化模板的HDL文件设置为top文件,并点击Open Elaborated Design
- 然后,在Tcl Console中执行指令
xilinx::designutils::write_template -template -verilog
- 然后到这个路径下去取
![image](https://private-user-images.githubusercontent.com/61445559/289113643-85119562-501f-456a-86d0-152c3fd3d071.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDEwNTgsIm5iZiI6MTczOTIwMDc1OCwicGF0aCI6Ii82MTQ0NTU1OS8yODkxMTM2NDMtODUxMTk1NjItNTAxZi00NTZhLTg2ZDAtMTUyYzNmZDNkMDcxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MTkxOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJjNTQzY2NhYmRkYTZkZmMxZjA2NmE4OWE1ZjQ4ZWE4Y2JlM2RhNGM0NWY0MDI5ZWFkNDhlODFjZTZlMTE1MDUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.UbRrFDGP8DHuFqNuomAK5NwNCEoj2i_7OHN4wve-6aE)
如果代码有错误,或者引脚分配冲突,都会报错来。这个速度很快。
这个模式也可以分配引脚。
![image](https://private-user-images.githubusercontent.com/61445559/289353881-8856c073-93ee-4a6a-9067-4f5525185149.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDEwNTgsIm5iZiI6MTczOTIwMDc1OCwicGF0aCI6Ii82MTQ0NTU1OS8yODkzNTM4ODEtODg1NmMwNzMtOTNlZS00YTZhLTkwNjctNGY1NTI1MTg1MTQ5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MTkxOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU2N2RjNWNmYWVkYjIyZTIzNmMwZDkyOWUxY2M2MGM5YjFjMjE4OTVkMDVkNGM2MDAwMTYyZThhNDU0OTRhMDUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.l99Slj9kzNtlLeyzLPtL3VVcOobkuDBW3kxKiNXMoCk)
![image](https://private-user-images.githubusercontent.com/61445559/296402052-d797636d-6543-444e-bf8b-f76d52860dcd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDEwNTgsIm5iZiI6MTczOTIwMDc1OCwicGF0aCI6Ii82MTQ0NTU1OS8yOTY0MDIwNTItZDc5NzYzNmQtNjU0My00NDRlLWJmOGItZjc2ZDUyODYwZGNkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MTkxOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWYxYTIxMzc1ZTAwMjgxYjlhYzM5NGY2YjkwMDY4ZTA1Yzc0MDRiMjQyNmNjNjljODU3YmUxN2NhODUwMWMxMjcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.TveNrorZ4GJm5HsSuW381SH6P5Wf4GkWg3LrdAxB8vk)
![image](https://private-user-images.githubusercontent.com/61445559/296402064-96b55708-5e7c-4336-9f5d-feeae35c5de2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDEwNTgsIm5iZiI6MTczOTIwMDc1OCwicGF0aCI6Ii82MTQ0NTU1OS8yOTY0MDIwNjQtOTZiNTU3MDgtNWU3Yy00MzM2LTlmNWQtZmVlYWUzNWM1ZGUyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MTkxOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFjMDhjYzFjOGE1MDRlYjY2YzNkY2MzNDgwNzQyZWFjZDVhNTI3MDUzNDE5ODZhYmExYTVkY2EzZjdlODA0OWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.zNQpF4QlnxrkUsFnHzTvHO_foagppg4EPza9yVKhXZ8)
推荐使用OOC per IP,综合速度快。但是原子等例程,它们用的是Global,为什么?(Global时序会好一些)
10) 需要先添加src下main函数,再添加fats库,才不会报f_read, f_open等函数找不到的问题。另一种解决方法是,先在bsp中remove fats,然后再重新添加fats,这样也是可以的。总之感觉是sdk软件的bug。
- 打开图片,如果安装了wps,默认是用wps图片浏览器打开
- 点击编辑->裁剪旋转
- 输入分辨率,并拖动选择框到想要的位置,点击对勾确认。
- 输入名字,保存为bmp格式
- 将产生的bmp图片复制到sd卡中,即ok。
![image](https://private-user-images.githubusercontent.com/61445559/302008535-0a5df4ad-17f1-4e99-8048-a1648cf10ab0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDEwNTgsIm5iZiI6MTczOTIwMDc1OCwicGF0aCI6Ii82MTQ0NTU1OS8zMDIwMDg1MzUtMGE1ZGY0YWQtMTdmMS00ZTk5LTgwNDgtYTE2NDhjZjEwYWIwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MTkxOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFjMjljMDZhMzE0ZGFjNTkwYWUzZTg1MTU0ZWE2Y2QyYjczZjljNWUzNzE3YzQ0MjU2NTdlODhmMjVlZWQ2MTMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0._CTplHA-UPbHlY5tUK_jXx3J3CQ3KPSKQfO54vu73K4)
![image](https://private-user-images.githubusercontent.com/61445559/302008683-06766487-509d-4eca-92b2-a2ee5687baa5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDEwNTgsIm5iZiI6MTczOTIwMDc1OCwicGF0aCI6Ii82MTQ0NTU1OS8zMDIwMDg2ODMtMDY3NjY0ODctNTA5ZC00ZWNhLTkyYjItYTJlZTU2ODdiYWE1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MTkxOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTMzOTdhOGYxNjQ2ZTc3YmY3ZmRkMzYyMmI1MDEwNTYwMGUwYzNjZWFkM2M3NDZjNjI5YjZhMGY2YmMzYmI1YTYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.APzGNeCJ6AzANYtehs9psZWiPgEPJQBGl5raU5bei3E)
- 在block中插入ILA,如下图所示连接ILA
- 按照正常的流程综合和产生bitstream
- 按照正常的流程产生hardware+bitstream,并打开sdk完成软件设计,并下载到FPGA中
- 多出的步骤:在vivado中连接hardware,这个时候会自动弹出ILA,于是就可以使用了。
- 如下图所示,可以看到捕捉到了uartlite产生了接收中断,但是中断控制器没有产生中断,原因找到了。
可以通过这种方式编辑:修改Address Editor的容量,然后再去看block ram generator,发现它的尺寸变了。
![image](https://private-user-images.githubusercontent.com/61445559/302532472-d964faa8-60e3-48dc-8a64-4f60ce330361.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDEwNTgsIm5iZiI6MTczOTIwMDc1OCwicGF0aCI6Ii82MTQ0NTU1OS8zMDI1MzI0NzItZDk2NGZhYTgtNjBlMy00OGRjLThhNjQtNGY2MGNlMzMwMzYxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MTkxOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTMyNWRjOTkzNTU5YzRhYzJmZTQxZTI2MmRmOWVjMGExZWY0NjJlMTM3YzE0MDliZDYzODNmM2EzYjkxMTkyNzAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.B88evDmAGmxB8v2cjPFlrQDBLJFow_Ye6NB7Nm5dKV4)
右键点击这个ip,可以看到“Open IP Example Design...."选项,打开即可生成一个新的工程。
打开Hardware Manager,点击xc7z010可以看到下面有3个器件(XADC, hw_ila_1, hw_vio_1),右键xc7z010选择Program Device....,重新下载程序后,ILA/VIO界面会自动弹出来。
19) AXI Traffice Generator模块,如果修改addr.coe或data.coe后,需要重新Generate Ouput Product才能更新到这个IP的仿真模型。如果修改后,不重新Generate,仿真结果仍然是旧的。
这是ip的仿真模型,只有通过Generate Output Product之后,用户定义的addr.coe和data.coe才能更新到这里。当然,如果手动修改这里可能也是可以的,但是不建议,因为这会导致ip仿真模型里的数据与用户输入的数据不同步。另外,这里是临时的,会随时被冲掉。
验证代码中,我们经常使用wait语句。
fifo测试中,这种写法好。在while条件中执行@语序,非常棒啊!
//打印
$display();
//wait
wait(rst_n==1);
//while()+@
while(full==1'b0)
@(posedge clk) begin
end
//repeat()+@
repeat(256)
@(posedge clk) begin
end
//时序控制法
#delay 1
wait(rst_n==1);
@(posedge clk)
//循环
repeat(128) begin
end
while(addra<=128) begin
end
for(i=0; i<128; i=i+1) begin
end
//repeat/while/for+ wait/@/delay等构成复杂语句
//task my_task;
input xxx;
output xxx;
begin
end
endtask
![image](https://private-user-images.githubusercontent.com/61445559/310183993-6bcf5ca6-795f-4693-bc85-79fddc9419d0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyMDEwNTgsIm5iZiI6MTczOTIwMDc1OCwicGF0aCI6Ii82MTQ0NTU1OS8zMTAxODM5OTMtNmJjZjVjYTYtNzk1Zi00NjkzLWJjODUtNzlmZGRjOTQxOWQwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEwVDE1MTkxOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRiODA4ZjUwNjlkOWVhY2UxNDAyYmVlMTNiNmZmMDhmMzAwMjNjYzFmYmVjYWI0ODNlMDU3NDliZThmMWYxY2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.hfMskdg1RkulXL_DjOPi3MNpERKhzPhFjdLenwE2zjE)
XTime_GetTime(&t2);
convertRGB565toRGB565(
*frame_dest,
*frame_target,
1920,1080,
x,y,
360,360
);
XTime_GetTime(&t3);
fill_pic(ptr1,*frame_target);
XTime_GetTime(&t4);
xfer_win(0,0,360,360);
for (int i = 0; i < LCD_Y_SIZE; i+=1)
{
xfer_cmd_pdata16_dma((u32)ptr1[i],12*64);
usleep(30);
}
XTime_GetTime(&t5);
int dt32 = (u32)(t3-t2)*(1000000.0/COUNTS_PER_SECOND);
int dt43 = (u32)(t4-t3)*(1000000.0/COUNTS_PER_SECOND);
int dt54 = (u32)(t5-t4)*(1000000.0/COUNTS_PER_SECOND);
xil_printf("dt32=%d, dt43=%d, dt54=%d\r\n", dt32, dt43, dt54);
打开prinf函数测到的延时
关闭prinf函数测到的延时
程序中在等待te中断
图中标红线的是printf的执行时间
原因找到了,是因为coresight_comp_0 uart的波特率非常低导致的。如果使用ps_uart,就没有问题。
#其余不用的输入/输出可以不分配引脚,并避免报错
set_property IOSTANDARD LVCMOS33 [get_ports *]
set_property SEVERITY {Warning} [get_drc_checks NSTD-1]
set_property SEVERITY {Warning} [get_drc_checks RTSTAT-1]
set_property SEVERITY {Warning} [get_drc_checks UCIO-1]
之前没有注意,bram_ctrl的地址默认给了0xc0000000,然后折腾了很久,zynq都访问不到。后来发现是这个原因。
目标:我想封装2个AXI Quad SPI,对应不同的模式(一个是Normal,一个是XIP),通过一个引脚信号spi_sel来选择。是可以的。
- 目标是生成包含2个AXI Quad SPI IP的代码。这需要一些临时的辅助过程。
- step1: 进入Create and Package New IP的界面,然后配置2个AXI Quad SPI IP
根据这里1,2,3来创建combine的verilog文件。1取其中的接口定义,2取其中的input/output定义,3取例化定义。
可以看到,axi_quad_spi_combine包含了2个axi_quad_spi ip核,根据spi_sel来选择。
这是封装后的效果。以及用microblaze驱动的效果。
右键bsp的设置里面有。
除非你修改了端口,否则不需要重新打开ip操作。例如,你只修改了内部代码,端口没有变化,那么就不需要打开ip操作。
https://blog.csdn.net/weixin_44167319/article/details/104074045
解决方法:关闭仿真,然后reset behavioral simulation。然后重新开启仿真即可。确实可以。
vscode在保存的时候,选择编码通过编码方式,选择GB2312保存。这样子vivado打开,中文就是可以正常显示的。
解决方法:删除工程下的sim文件夹,然后重新启动仿真即可。
分情况: 如果是自己写的代码,没有封装成bd的模式,那么修改代码后,直接点击Relaunch Simulation即可。 如果是bd封装的代码,修改代码后,一般需要generate output product才能仿真。generate output product会自动运行综合,很慢。 因此,如果是仿真,建议选择reset output product,然后relaunch simulation,这样更快。
如果选择OOC,那么综合的时候会出错。一定要选择global,也就是让ip以flattern的方式集成到rtl代码中去。
用defparam来穿透多层模块,修改底层模块的参数 用force来穿透多层模块,修改底层模块的net信号