u@home:~$

  • 看到个接口上保存信号的

    接口给过来的信号xxx只持续一个cycle,这样的信号可能要接收端保存下。存到dff后,保存的xxx_q要到下一个cycle才行,但这个信号也许当前这个cycle就要用,那就把xxx和xxx_q或起来 xxx | xxx_q 这样的代码写不少了,这回是看到别人代码里也这样用,说明大家都遇到过相似的情况。不过这里用的不是或, 而是有一个信号表示是不是第一个cycle。 这个是always的代码风格。 reg [2:0] attrs_reg; always @(posedge clk or negedge reset_n) if (~reset_n) attrs_reg <= {3{1'b0}}; else if (fist_cycle) attrs_reg <= attrs_i; wire [2:0] attrs = first_cycle ? attrs_i : attrs_reg;

  • 记点和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选项去掉。