迷醉,迷醉,迷醉。
讲道理,为什么datapath的数据就一个周期一个周期存得好好的呢。为什么自己写的cp0就各种串数据呢??说好的非阻塞呢???
我开了无数个中介寄存器,reg、wire中间隔了几层,结果呢?寄存器呢?你存的东西呢?为什么输入端一变,这中间隔的几层寄存器都隐形了??怎么输出直接就出结果了??你练短跑的???
我都被逼急了。两个寄存器可以吧?搞个分路选择可以吧?这下可以给我存了吧?
仿真都好好的,下板子一试。为什么way0和way1每个时刻都一样?都一样?都一样?说好的两路选择呢?说好的呢?怎么跟说好的不一样??你们是同卵双生的??
always @(posedge clk) begin
if(way)begin
way<=0;
way0<=ret_addr;
end
else begin
way<=1;
way1<=ret_addr;
end
ir_coming <= ir_in;
end
讲道理这就够迷了。
还有更迷的。
我ret_addr要是作为wire连进来。时钟周期一到,存到epcr里面的,也跟着ID指令立刻就变了,变成ehbr的地址了,而不是中断产生时的PC。那好嘛。我在datapath加个寄存器给你可以吧?你给我存住可以吧?然后呢。你存就好好存啊。你怎么居然存不了当前的ret_addr?怎么一直是上一周期的ret_addr?所以我加了寄存器你给我弄上一条PC的,我不加你又给我整中断响应的那条PC,那我要的这条呢?发生了中断了的这条呢?加半个寄存器??你加给我看啊摔!!
讲道理这就够迷了。
还有更迷的。
else if (ir_coming && ~during) begin
during <= 1;
jump_en <= 1;
jump_addr <= ehbr;
epcr <= way?way0:way1;
end
整个代码就这一段给during赋值1。结果下板子。为什么有时刻during是1但是jump_en是0啊??魔幻分身术??幻影变身术??
讲道理。我道理也不讲了。
就是更迷。没有最迷。
initial begin
during<=0;
end
下板之后。我也不说了。求during初值吧。对就是1。每次reset。都是1。
我到底做错什么了???
好气啊。
迷醉,迷醉,迷醉。
珍爱生命,珍爱生命,珍爱生命。
远离FPGA/XILINX ISE。
好气啊。