-
Notifications
You must be signed in to change notification settings - Fork 0
Home
minichao9901 edited this page Mar 1, 2024
·
64 revisions
xilinx::designutils::write_template -template -verilog
(*mark_debug="true"*)
connect
ta //list all targets
ta 2 //选择targets 2
help
help ta
jtagterminal -start
mrd 0x00000000 4
mwr 0x50 0x11223344
mrd 0x50
help mwr //关于写的更多用法
help mrd //关于读的更多用法
rrd //读取cpu寄存器组
rrd mpcore //可以看到所有的cpu内部外设寄存器
rwr //写cpu寄存器组
rst //复位
bpadd //添加断点
bpaddr -addr 0x1000000
bpadd -addr &main
bpadd -file main.c -line 23
bpadd -addr &fooVar -type hw -mode 0x3
nxt //到达breakpoint后,会停止。输入nxt执行下一行
nxt 10000 //往下执行10000行。输入一个很大的值,目的是让其达到下一个breakpoint
在xsct中bpadd添加断点后,再烧录程序,它会在断点的地方停下来。这个时候可以用rrd/mrd观察寄存器组或内存的信息。输入nxt 10000,让其继续跑下去。
#include "xil_io.h"
u8 Xil_In8(UINTPTR Addr)
u16 Xil_In16(UINTPTR Addr)
u32 Xil_In32(UINTPTR Addr)
u64 Xil_In64(UINTPTR Addr)
void Xil_Out8(UINTPTR Addr, u8 Value)
void Xil_Out16(UINTPTR Addr, u16 Value)
void Xil_Out32(UINTPTR Addr, u32 Value)
void Xil_Out64(UINTPTR Addr, u64 Value)
DDR访问,一般会关闭Dcache
#include "xil_cache.h"
Xil_ICacheDisable();
Xil_DCacheDisable();
Xil_DCacheFlush();
Xil_DCacheFlushRange((u32)rx_buffer, BUFF_LEN*4);
#include "xtime_l.h"
XTime_SetTime(0);
XTime t1,t2;
function1();
XTime_GetTime(&t1);
function2();
XTime_GetTime(&t2);
XTime dt1 = ((t1) * 1000000) / (COUNTS_PER_SECOND);
XTime dt2 = ((t2-t1) * 1000000) / (COUNTS_PER_SECOND);
xil_printf("dt1=%f, dt2=%f\r\n", dt1,dt2);
- 15211功耗数据
- 15211问题跟踪列表分析
- 孙工布置的仿真tb及路径规范
- 15231新的方案面积评估
- 研究串口加fifo:1周
- 完成原子mb例程(还有2个):1周
- 完成z7nano ADC_DAC例程的进一步学习研究:1周
- 完成原子的剩余例程的学习:2周
- 安装openocd,研究一下:1周
- 学习小梅哥的视频:一个月
- 大道至简的书:2个月
- new3 去掉local memory。目标是验证,去掉local memory之后,mb程序是否可以直接在ddr或local memory中运行?
- new3_1 基于new3,并参考了xilinx的doc,已经搞定了。最核心的其实是手动修改mb的ld文件,让vector和reset位于ddr区域。
- new4 去掉dp接口,通过dc接口接axi_gpio/axi_uartlite。目标是验证,不用dp接口,用dc接口是否可以读写外设?(不可以)
- new5 增加对HP0_DDR_LOWOCM的总线地址访问。目标是寻找为什么ocm_higher_addr不能访问?
- new6 增加对HP0_DDR_LOWOCM的总线地址访问,并修改mb的cache地址范围为0x10000000--0x1fffffff。目标是寻找寻找为什么ocm_higher_addr不能访问?
- new7 基于new6,换成GP0_DDR_LOWOCM访问
- new8 基于new7,将HP0_HIGH_OCM换成GP0_LOW_OCM。这个时候,mb的Data全部都是GP0访问,没有HP0访问。发现这种情况所有ram都可以访问到,是最好的。
- new9 去掉IC/DC接口,启动DP/IP接口,用DP/IP接口去访问外设和执行程序,看是否可以执行程序?(可以)
parameter CNT_MAX=50_000_000;
reg [31:0] div_cnt;
reg [5:0] lsm_cnt;
always @(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n==0)
div_cnt<=0;
else if(div_cnt==CNT_MAX-1)
div_cnt<=0;
else
div_cnt<=div_cnt+1;
always @(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n==0)
lsm_cnt<=0;
else if(div_cnt==CNT_MAX-1)
lsm_cnt<=lsm_cnt+1;
`timescale 1ns / 1ps
module clk_rstn_gen(
output sys_clk,
output sys_rst_n
);
reg sys_clk, sys_rst_n;
initial sys_clk=0;
always #10 sys_clk=~sys_clk;
initial begin
sys_rst_n=0;
#1000;
sys_rst_n=1;
end
endmodule
`timescale 1ns / 1ps
module clk_rstn_gen(
output sys_clk,
output sys_rst_n1,
output sys_rst_n2,
output sys_rst_n3
);
reg sys_clk;
reg sys_rst_n1, sys_rst_n2, sys_rst_n3;
initial sys_clk=0;
always #10 sys_clk=~sys_clk;
initial begin
sys_rst_n1=0;
sys_rst_n2=0;
sys_rst_n3=0;
#10000;
sys_rst_n1=1;
#10000;
sys_rst_n2=1;
#10000;
sys_rst_n3=1;
end
endmodule