1、soc讀寫是如何實現的?
2、讀清是如何實現的?
**中data_err_dy實現了讀清功能,data_err:1表示有效,存在錯誤資料,在mem匯流排讀取之前,data_err_dy一直保持為1,mem匯流排讀取後,將data_err_dy清零。
module soc_mem_wr
( input soc_clk ,
input soc_rst_n ,
input mem_rd ,
input mem_wr ,
input [9:0] mem_rw_addr ,
input [31:0] mem_wr_dat ,
output reg [31:0] mem_rd_dat ,
output reg mem_rd_datvld ,
input data_err ,
output reg send_data_enable ,
output reg data_down_req
); reg data_err_dy ;
always @ (posedge soc_clk or negedge soc_rst_n) begin
if(!soc_rst_n)begin
send_data_enable <= 1'b0;
data_down_req <= 1'b0 ;
end
else begin
if(mem_wr)
case(mem_rw_addr)
10'h0 : send_data_enable <= mem_wr_dat[0] ;
10'h1 : data_down_req <= mem_wr_dat[0] ;
default : ;
endcase
endalways @ (posedge soc_clk or negedge soc_rst_n) begin
if(!soc_rst_n)
mem_rd_datvld <= 1'b0 ;
else
mem_rd_datvld <= mem_rd ;
always @ (posedge soc_clk or negedge soc_rst_n) begin
if(!soc_rst_n)
mem_rd_dat <= 32'b0;
else
if(mem_rd)
case(mem_rw_addr)
10'h0 : mem_wr_dat <= ;
10'h1 : mem_wr_dat <= ;
10'h2 : mem_wr_dat <= ;
default : mem_wr_dat <= 32'hffff_ffff ;
endcase
end//讀清是如何實現的
always @ (posedge soc_clk or negedge soc_rst_n) begin
if(!soc_rst_n)
data_err_dy <= 1'b0;
else
data_err_dy <= (mem_rd&(mem_rw_addr==10'h2))? 1'b0 :
data_err_dy ? data_err_dy : data_err ;
endmodule
通用暫存器 記憶體讀寫
暫存器的結構 eax 的一半為 ax ax 的一半為 al ax就是eax的一部分 al就是ax的一部分 低位 ah就是ax的一部分 高位 8位暫存器只能放2個十六進製制的數 乙個位元組 彙編指令 mov,add,sub,and,or,xor,not 計算機記憶體的每乙個位元組會有乙個編號 即記憶體...
Linux下讀寫暫存器
arm裸機下讀寫暫存器很容易,各個暫存器和記憶體的位址是單一位址空間,他們是用相同的指令進行讀寫操作的.而在linux下就要複雜很多,因為linux支援多個體系架構的cpu。比如arm和x86就不一樣,具體的差別我暫時也說不上來,這個涉及到cpu體系的設計。目前我只關心 linux為了支援多個硬體體...
Linux下讀寫暫存器
arm裸機下讀寫暫存器很容易,各個暫存器和記憶體的位址是單一位址空間,他們是用相同的指令進行讀寫操作的.而在linux下就要複雜很多,因為linux支援多個體系架構的cpu。比如arm和x86就不一樣,具體的差別我暫時也說不上來,這個涉及到cpu體系的設計。目前我只關心 linux為了支援多個硬體體...