在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 245|回复: 4

[求助] 实现寄存器的某位为某标志位

[复制链接]
发表于 2025-3-23 22:16:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 Dearexile 于 2025-3-24 09:40 编辑

好久没写数字 很生疏 想问下大家 如果要实现寄存器的某位为某标志位(可以理解为实现同步变化?),例如Control_status_2寄存器(8bit)的b3位为alarm_flag位,可以这样写吗?
wire alarm_flag;
assign alarm_flag=Control_status_2[3];
但要求复位的话 不应该就是时序逻辑了吗 但时序逻辑的话 又会变成延迟一拍才同步 有点没明白这块
还是说这块就这样写 而时序逻辑直接对寄存器写呢(而不管标志位)
发表于 2025-3-24 15:08:37 | 显示全部楼层
没理解你关注的点。如果直接assign过来,想复位flag只能通过复位csr。如果用一个alwys_ff来做寄存,复位寄存的ff就可以。关键没明白关注延时的点是什么?如果关心Clk cycle量级的延时,那最好自己维护一个reg,来寄存alaram _flag。alarm_flag做个mux,更新的csr的时候选择csr,否则剩下全部来自寄存值。这样既不会有延时,也可以只复位寄存FF实现独立复位。
wire alarm_flag;
reg alarm_flag_ff;
always @(posedge i_clk or negedge i_rst_n) begin
     if (i_rst == 1'b0) begin
         alarm_flag_ff <= 1'b0;
     end
     else begin
         alarm_flag_ff <= alarm_flag;
     end
end
assign alarm_flag = controL_status_update? control_status_2[3] :alarm_flag_ff;
发表于 2025-3-24 15:36:25 | 显示全部楼层
一般来说寄存器的位当然可以做完标志位,不过要看是写入的标志位还是读出,如果是读取的某个标志信号,例如busy等,它是由rx/tx_fsm产生,无法操控,只读的;如果是写入的话,就是两种情况,一种写1kick,另一种就是写1使能,类似于你的写法,这种”Control_status_2[3]“本身就是寄存器,就是时序的逻辑;不太理解你的同步变化指得是什么
 楼主| 发表于 2025-3-24 16:16:08 | 显示全部楼层


robertlee2014 发表于 2025-3-24 15:08
没理解你关注的点。如果直接assign过来,想复位flag只能通过复位csr。如果用一个alwys_ff来做寄存,复位寄 ...


非常感谢 懂了懂了 之前给自己绕晕了 又看了看就明白了
 楼主| 发表于 2025-3-24 16:19:01 | 显示全部楼层


数学必考150 发表于 2025-3-24 15:36
一般来说寄存器的位当然可以做完标志位,不过要看是写入的标志位还是读出,如果是读取的某个标志信号,例如 ...


感谢感谢 之前绕晕了 觉得如果写成wire,用assign,不知道时序怎么写,但其实给相应的寄存器的位写时序always块就行了;而写成reg又觉得会打一拍后才相等,但其实也有解决办法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-4-1 01:04 , Processed in 0.018488 second(s), 7 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表