前情提要:CPU使用loca bus总线访问FPGA寄存器
1.由于外部硬件走线不一致等问题,所以在信号到达逻辑引脚的时候时序可能较差,为了优化时序,在localbus所有信号线都接入逻辑的时候都需要在localbus_clk信号下布局到IOB寄存器,便于后续时序的保证;
2.对逻辑寄存器内部读写操作:
//推荐的写方式
always ( posedge locbus_clk)
begin
if (~locbus_wr && ~locbus_cs)
begin
case(locbus_adrr[7:0])
8'd4:test1[7:0] <= locbus_data ;
8'd5:test2[7:0] <= locbus_data ;
8'd6:test3[7:0] <= locbus_data ;
end
else
locbus_data <= 16'b0 ;
end
//不推荐方式,这里把写使能当作时钟使用,本身信号质量就难以保证,时序也会容易有问题。
always ( posedge locbus_clk or posedge locbus_wr )
begin
if (~locbus_cs)
begin
case(locbus_adrr[7:0])
8'd4:test1[7:0] <= locbus_data ;
8'd5:test2[7:0] <= locbus_data ;
8'd6:test3[7:0] <= locbus_data ;
end
else
ocbus_data <= 16'b0 ;
end
//推荐读的方式,还是不要使用组合逻辑,感觉还是使用时序逻辑好点
always ( posedge locbus_clk) //不要用always (*)
begin
if(~locbus_wr && ~locbus_cs)
begin
case(locbus_adrr[7:0])
8'd0:locbus_data <= YEAR ;
8'd1:locbus_data <= MONTH ;
8'd3:locbus_data <= DAY ;
end
end