u@home:~$

  • 记点和icache相关的

    Line Fill Buffer(LFB) 256-bit 4 64-bit input pfu_icu_req_i, input [31:3] pfu_icu_addr_i, input pfu_icu_first_i, input pfu_icu_priv_i, input pfu_icu_vf_i, output icu_pfu_ack_o, LFB 填充进一个cache line的时候,按总线宽度,可以是4次64-bit。 对外接口的话,icache控制模块icu不需要考虑比如是否是axi burst。 output icu_biu_req, input biu_icu_ack, input [63:0] biu_icu_data, input biu_icu_data_valid, reg [31:3] lfb_addr; reg [255:0] lfb_data; always @(posedge clk or negedge resetn) if (~resetn) begin lfb_addr <=...

  • 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上才行。 一开始纠结在这里很长时间。 不用的时候一定要吧Signal Tap关掉,否则编译出来的东西还带着。Assignments->Settings,把SignalTap II Logic Analyzer里Enable SignalTap II Logic Analyzer选项去掉。

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