u@home:~$

  • ifu fetch request logic

    现在的问题是:ifu 发出的ifu_biu_rd_req,是按一个cycle触发的。也就是说–_表示ifu发出了2次request。结果就是biu register了这个请求,连着发出了同一addr同一arid的请求,这样发有问题。 这样有问题,以为ifu发出第一个req后,读的数据还没回来,这时候biu不应该接受ifu发出的第2个req。这时候biu可以发lsu的req,因为arid不同。 看了下代码,是对应的axi_ar_ready_ifu还没有实现。 assign biu_ifu_rd_ack = axi_ar_ready /*& axi_ar_ready_ifu*/ & ifu_select; assign biu_lsu_rd_ack = axi_ar_ready /*& axi_ar_ready_lsu*/ & lsu_select; assign arb_rd_val = biu_ifu_rd_ack | biu_lsu_rd_ack; axi_ar_ready_ifu以ifu_select开始,以axi_rdata_ifu_val结束。 改名成axi_ar_busy_ifu。 // scenario 0 // // ifu_select : _-_____ // axi_rdata_ifu_val : _____-_ // // axi_ar_busy_ifu_in : _----__ // axi_ar_busy_ifu_q : __----_...

  • axi channel valid control

    原来我是用下面这种方式控制axi channel里的valid,比如ar_valid。 但当结束信号ext_biu_ar_ready和开始信号arb_rd_val_q一起high起来的时候会有问题,后面还需要补偿下 arb_rd_val_q 这个scenario 2我也不记得当时什么场景了, 好像不太对,先这么放着了。 // scenario 0 // // arb_rd_val_q : _-_____ // ext_biu_ar_ready : _____-_ // // ar_valid_in : _----__ // ar_valid_q : __----_ // biu_ext_ar_valid : _-----_ // scenario 1 // // arb_rd_val_q : _-_____ // ext_biu_ar_ready : _-_____ // // ar_valid_in : _______ //...

  • verilog 里 order of priority 实现的方式

    a的priority最高。 wire event_a; wire event_b; wire event_c; wire event_d; wire a_select; wire b_select; wire c_select; wire d_select; assign a_select = event_a; assign b_select = ~event_a & event_b; assign c_select = ~event_a & ~event_b & event_c; assign d_select = ~event_a & ~event_b & ~event_c & event_d; 如果2进制编码的话,可以这样,3bit没用完,就不搞太多x_select。 wire [2:0] encode; assign...