Skip to content
minichao9901 edited this page Feb 27, 2024 · 64 revisions

如何快速生成例化模板

xilinx::designutils::write_template -template -verilog

verilog代码中增加debug_mark语句(一般放在接口定义前面)

(*mark_debug="true"*)

xsct的一些命令

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,让其继续跑下去。

工作计划

  • 15211功耗数据
  • 15211问题跟踪列表分析
  • 孙工布置的仿真tb及路径规范
  • 15231新的方案面积评估

研究计划:

  • (dma/vdma/fifo/axi)
  • 重新研究一下dma的使用
  • 研究一下大佬的VIP驱动程序
  • 研究自定义外设加fifo
  • 完成ADC_DAC例程的进一步学习
  • 完成原子的剩余例程的学习
  • mb读写ps端的lwip

axi-cdma的使用例子
https://www.cnblogs.com/ifpga/p/9092016.html


  • 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;    

tb激励模板

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 
Clone this wiki locally