IC知识积累——02_SystemVerilog unique 和 priority

unique

使用方法:

unique case(<case_expression>)

...//条件选项

endcase

其作用等效于同时使用verilog中的full_case及parallel_case

**parallel_case:**在Verilog中使用的方式是

case (CASE_SIGNL) // synopsys parallel_case

上述语句是告诉综合器,不需要产生优先级逻辑,从而缩小了硬件的规模。缺点是,设计者要保证所有的case不会同时发生,否则case里面的某些信号会被赋予一个不确定的值。适合于不需要产生优先级的case

full_case: 对于case来说,如果没有default的选项,综合器会产生一个latch,因为CASE都不成立时,A要保持上一次的值。但是一般情况下,设计者是不愿意产生latch的。因此full_case就是告诉综合器,所有的CASE已经覆盖,不需要产生latch。但是需要注意的是:设计者要保证只会有所设计的CASE,不会有其他Case的出现,否则case里的信号会是一个不确定的值。

case (CASE_SIGNL) // synopsys full_case

回到SystemVerilog的语句说明中来:
unique case:该语句指定,必须有且只有一个条件选项与条件表达式匹配。通俗的讲,使用这个语句,case的条件没有由上至下的优先级,同时也不用加default项,不会产生latch。但是你必须得保证所有case都可以被覆盖,同时不会同时发生。否则就会有不定态值产生。

示例代码:

unique case (1'b1)

      csr_save_cause_i: begin

        unique case (1'b1)
          csr_save_if_i:
            exception_pc = pc_if_i;
          csr_save_id_i:
            exception_pc = pc_id_i;
          default:;
        endcase

        priv_lvl_n     = PRIV_LVL_M;
        mstatus_n.mpie = mstatus_q.mie;
        mstatus_n.mie  = 1'b0;
        mstatus_n.mpp  = PRIV_LVL_M;
        mepc_n         = exception_pc;
        mcause_n       = csr_cause_i;
      end //csr_save_cause_i

      csr_restore_mret_i: begin //MRET
        mstatus_n.mie  = mstatus_q.mpie;
        priv_lvl_n     = PRIV_LVL_M;
        mstatus_n.mpie = 1'b1;
        mstatus_n.mpp  = PRIV_LVL_M;
        epc_o          = mepc_q;
      end //csr_restore_mret_i
      default:;
    endcase

priority:

等效于verilog中的full_case,也就是不会产生latch,但是会保留优先级的逻辑。

该语句指定:
至少有一个条件选项与条件表达式相符,若存在多个条件选项的值与条件表达式匹配,则必须执行第一个匹配分支。

priority case(<case_expression>)

...//条件选项

endcase

加油!打工人!

### 配置 `verilog_systemverilog.vim` 文件 为了优化 Verilog SystemVerilog 的编辑体验,在 `.vimrc` 中添加特定配置是必要的。这不仅能够实现语法高亮,还能增强其他功能如自动补全、语法检查格式化。 #### 修改 .vimrc 文件 在 `.vimrc` 文件中加入以下内容可以确保 Vim 正确识别并处理不同类型的 SystemVerilog 文件: ```vim augroup filetypedetect au BufNewFile,BufRead *.sv,*.svh,*.svp,*.vh,*.vp setfiletype systemverilog augroup END ``` 上述设置通过关联指定扩展名到 `systemverilog` 类型来触发相应的语法高亮其他特性[^4]。 #### 安装插件支持 对于更高级的功能需求,安装专门针对 Verilog 及其超集——SystemVerilog 设计的插件是非常有帮助的。推荐使用[Vim Syntax Plugin for Verilog and SystemVerilog][^3]这款插件,它可以极大地提升开发效率,使 Vim 成为一个强大的硬件描述语言开发平台。 #### 自定义 verilog_systemverilog.vim 如果希望进一步自定义 `~/.vim/syntax/verilog_systemverilog.vim` 或者类似的文件路径下的配置文件,则可以根据个人喜好调整颜色方案、关键字列表等参数。下面是一个简单的例子展示如何增加额外的关键字用于更好的语法着色效果: ```vim " ~/.vim/syntax/systemverilog.vim syn keyword svStatement if else case default forever fork join repeat while do begin end module initial always task function wire reg input output inout supply0 supply1 tri pullup pulldown small medium large vdd vss hi def link svStatement Statement ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俺是菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值