-
Signal Tap II debug on FPGA
并不了解Signal Tap工作原理,把项目下载到FPGA,设置抓取信号和触发条件。 感觉应该是加了一些逻辑在项目里,因为抓波形需要FPGA芯片里的RAM,抓取的信号越多,能抓出来的信号深度”Sample depth”,也就是多少个cycle,就越少。 而且需要项目降低些频率。比如调soc2的时候,本来可以工作在75MHz,但如果加上Signal Tap,运行就不正常,感觉是有些指令完不成。所以就改到25MHz了。 应该在编译后的报告里可以看到,Signal Tap是需要和项目一起编译的。 “Invalid JTAG configuration”这些提示不是说FPGA开发板连不上,而是要编译好项目后在SOF Manager那里点”Program Device”把项目下载到FPGA上才行。 一开始纠结在这里很长时间。
-
ext_intr sync
外部中断ext_intr来的时候不确定,可能在一个时钟周期里的任意时刻到,处理的时候也许cycle省的时间不够了,更差的情况是在cycle的末尾,给别的寄存器setup的时间到。所以ext_intr没法直接用,要先同步一下。 同步可以是与clk同步,让ext_intr总是在clk上升沿送进来。 // two-stage synchronizer module sync2r ( input clk, input resetn, input din, output q ); reg d1, d2; always @(posedge clk, or negedge resetn) begin if (resetn) {d2, d1} <= 2'b0; else {d2, d1} <= {d1, din}; end assign q = d2; endmodule 如果要以某一个信号作为起始信号同步,就可以先在sync2r后再与某个信号的上升沿同步。 先做个这个信号上升沿的检测,比如是ifu_exu_valid_rising_e; wire ifu_exu_valid_rising_e; wire...
-
lsu memory interface
lsu对外数据读写的接口以前是chiplab里的,这样: wire data_req; wire [`GRLEN-1:0] data_pc; wire data_wr; wire [3 :0] data_wstrb; wire [`GRLEN-1:0] data_addr; wire data_cancel_ex2; wire data_cancel; wire [`GRLEN-1:0] data_wdata; wire data_recv; wire data_prefetch; wire data_ll; wire data_sc; wire [`GRLEN-1:0] data_rdata_m; wire data_addr_ok; wire data_data_ok_m; wire [ 5:0] data_exccode; 现在改成这样 wire lsu_biu_rd_req; wire [`GRLEN-1:0] lsu_biu_rd_addr; wire biu_lsu_rd_ack; wire...