# 企业级RTL代码风格怪谈 **Repository Path**: aheck/enterprise-rtl-code-style ## Basic Information - **Project Name**: 企业级RTL代码风格怪谈 - **Description**: 企业级RTL代码风格原来长这样!!!!以前的verilog都白写了!!! - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-02 - **Last Updated**: 2023-11-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 企业级verilog代码怪谈 欢迎来到企业级verilog代码的世界,在编写你的代码时,请务必遵循以下规则: 1. 如果有寄存器,请不要使用always块,如果有DFT模块,请实例化它。 ``` verilog gnrl_dfflr #(1) flg_dfflrs(flg_ena, flg_nxt, flg_r, clk, rst_n); ``` 2. 如果遇见 ``` verilog if (sel1) out = in1[3:0]; else if (sel2) out = in2[3:0]; else if (sel3) out = in3[3:0]; else out = 4'b0; ``` 不要害怕,请改成: ``` verilog assign out = ({4{sel1}} & in1[3:0]) | ({4{sel2}} & in2[3:0]) | ({4{sel3}} & in3[3:0]) ``` 请记住,if-else和case并不能传播不定态,编译器只会产生选择电路,而不是并行选择电路。 3. 不要轻易在数据通路上使用带有reset的寄存器,它的寄存器面积与时序会比较落后,如果你必须使用,请在控制通路上。 4. 请务必牢记,Clock和Reset信号应该被禁止用于其他的逻辑,只能接入DFF中