ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[RTL]W1C類型的Register是如何工作的

2020-04-19 11:04:00  阅读:293  来源: 互联网

标签:wire err RTL Register rd flag 類型 wr apb


                    一種W1C類型Register的RTL實現方法

 

       前言:在Design中會用到很多的states寄存器,用來指示Design的工作狀態,而Sofeware可以通過設置其他寄存器來清除掉這些States,這種需求可以用W1C類型(寫1清0,讀取無影響,寫0無影響)的寄存器來實現。

 

一、定義偏移地址(offset)

localparam    RG_ERR_FLAG_HP    =    12'h80;
localparam    RG_ERR_FLAG_LP    =    12'h84;

 

二、寫使能信號的邏輯

wire    apb_wr_ps;
wire    apb_rd_ps;
wire    apb_rd_en;

assign  apb_wr_ps = psel_wr & pwrite_wr  & penable_wr;
assign  apb_rd_ps = psel_rd & ~pwrite_rd & penable_rd;
assign  apb_rd_en = psel_rd & ~pwrite_rd;

三、地址映射

wire rg_err_flag_hp_wren = apb_wr_ps & (paddr_wr[(ADDR_DIDTH-1):0] == RG_ERR_FLAG_HP);
wire rg_err_flag_lp_wren = apb_wr_ps & (paddr_wr[(ADDR_DIDTH-1):0] == RG_ERR_FLAG_LP);

 

四、功能實現

 4.1、Clear條件的產生

//write 1 clear, input set
input wire [31:0]  hp_err_flag_set;
input wire [31:0]  lp_err_flag_set;

//write 1 clear
input wire [31:0]  hp_err_flag_clr;
input wire [31:0]  lp_err_flag_clr;  

assign hp_err_flag_clr = {32{rg_err_flag_hp_wren}} & pwdata[31:0];
assign lp_err_flag_clr = {32{rg_err_flag_lp_wren}} & pwdata[31:0];

 4.2、RTL實現

always @ (posedge clk or negedge rst_n) begin
  if(~rst_n)
    reg_err_hp_state <= 32'h0;
  else begin
    for(i = 0; i < 32; i = i + 1) begin
      reg_err_hp_state[i] <= hp_err_flag_state_set[i] ? 1'b1 :
                             hp_err_flag_state_clr[i] ? 1'b0 :
                             reg_err_hp_state[i] ;
    end
  end
end
always @ (posedge clk or negedge rst_n) begin
  if(~rst_n)
    reg_err_lp_state <= 32'h0;
  else begin
    for(i = 0; i < 32; i = i + 1) begin
      reg_err_lp_state[i] <= lp_err_flag_state_set[i] ? 1'b1 :
                             lp_err_flag_state_clr[i] ? 1'b0 :
                             reg_err_lp_state[i] ;
    end
  end
end

 

标签:wire,err,RTL,Register,rd,flag,類型,wr,apb
来源: https://blog.csdn.net/gsjthxy/article/details/105596197

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有