我在Alteras DE1板上设计了一个处理器,为此我决定使用JAVA BYTECODES作为指令集。
问题是当指令iadd cmes up我得到两种不同的行为时,堆栈区域是宽度为32且深度为64的altsyncram宏功能不输出数据。我检查了所有的总线和控制信号,它们的值似乎是正确的。
红线表示地址总线发生变化,导致数据出现变化但紫色线出现问题所在。数据应该改为' h00000004,但它是剂量。
因为你可以看到所有条件都是一样的。
与之相关的代码是:
stack_write = 1'b0; // read stack_area
stack_bus_select = 1'b0; // stack_bus = stack_ptr
stack_add_sub = 1'b0; // stack incrementer/decrementor = decrement
stack_add_enable = ~stack_add_enable; // enable stack adder
stack_ptr = stack_add_out;
wait(!clock);
wait(clock);
long_A = {{32{stack_data_out[31]}}, stack_data_out[31:0]};
stack_add_sub = 1'b0;
stack_add_enable = ~stack_add_enable;
stack_ptr = stack_add_out;
wait(!clock);
wait(clock);
long_B = {{32{stack_data_out[31]}}, stack_data_out[31:0]};
ALU_operation = 3'b100;
wait(!clock);
wait(clock);
stack_data_in_reg = result;
stack_write = 1'b1; // write stack_area
stack_bus_select = 1'b0; // stack_bus = stack_ptr
stack_add_sub = 1'b1;
stack_add_enable = ~stack_add_enable;
stack_ptr = stack_add_out;
done = 1'b1;
PS:我一般都是verilog和FPGA的新手。所以欢迎任何和所有建议。