Verilog整洁代码之道--信号命名和定义应该明确

文摘   2024-10-25 18:14   四川  

在设计中,我们不断的给目录、源代码、文件、函数、变量、参数、类、封包进行命名与定义。当一件工作需要进行的次数非常之多,足以证明它是不可或缺的基本工作。我们一定要知道一点,基础工作是整个项目的基石。忽视抑或是轻视基础工作是一件非常错误的工作理念。我们需要用最严谨认真的态度去对待,同时作为回报,它将令你的作品显得专业而优雅。我们以信号的定义为例来说明这个问题。先来看这么一组代码:

always @(posedge clk or negedge rst_n)begin     if(!rst_n)begin          cnt <= 0;     end     else if(add_cnt)begin         if(end_cnt)              cnt <= 0;          else              cnt <= cnt + 1;     endend 
assign add_cnt = flag1 || flag2 ; assign end_cnt = add_cnt && cnt==x-1 ; always @(posedge clk or negedge rst_n)begin   if(rst_n==1'b0)begin   flag1 <= 1'b0  end   else if(en1)begin    flag1 <= 1'b1;  end  else if(end_cnt)begin       flag1 <= 1'b0  end end 
always @(posedge clk or negedge rst_n)begin  if(rst_n==1'b0)begin   flag2 <= 1'b1;    end    else if(en2)begin      flag2 <= 1'b1;      end     else if(end_cnt)begin       flag2 <= 1'b0     endend 
always @(*)begin  if(flag1)  x = 5 else if(flag2)  x = 7    else begin      x = 0    end end

这组代码的功能是当en1时计数5下;en2计数7下。在这组代码中,en1时flag1拉高;end-cnt时flag1变低;en2时flag2拉高;end-cnt时flag2变低;也就是在flag1或者flag2时加一,然后用flag1和flag2分别区分计数5下和7下。

尽管能够实现功能,但是在这组代码中,存在信号定义不明确得现象。flag1和flag2到底是什么意思?是表示flag1(flag2)时en1产生,还是en1(en2)时的计数状态?为说明这一点就得用到XXXXX (写加一条件时需要用到add_cnt = flag1||flag2)语句。

这里重申一下我们很重要的那条简单原则,一个代码(信号)只做一件事且做好这件事!按照这个规则,思路就是这样了:用一个信号flag1来表示计数状态,另外一个信号flag2表示是由en1还是en2所产生。那么,加一与否的条件非常简单,就是是否处于工作状态(flag1);同理,计数5或者7下只需要使用flag2一个信号。那么代码就会是这样:

always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt <= 0; end else if(add_cnt)begin if(end_cnt) cnt <= 0else cnt <= cnt + 1endend 
assign add_cnt = flag1 ; assign end_cnt = add_cnt && cnt==x-1 ; 
always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin flag1 <= 1'b0end else if(en1||en2 )begin flag1 <= 1'b1; end else if(end_cnt)begin flag1 <= 1'b0endend 
always @(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin flag2 <= 1'b1; end else if(en1)begin flag2 <= 1'b0; end else if(en2)begin flag2 <= 1'b1; endend 
always @(*)begin if(flag==0x = 5else x = 7;end 

看到这里,也许有些朋友会觉得:好像区别没那么大啊?ok,我们假设一下,如果程序中不仅是是en1,en2,而是有en3,en4……enX,又或者将来需要维护和优化,这两者的区别将会天壤之别。关于信号定义方面,《至简设计法》的作者潘文明给出了一个近乎完美的答案。例如在计数器代码设计中的“架构八步法”,第一步就是明确定义信号,用具体、清晰且无疑异的语句,定义每个信号所要实现的功能,以及重点描述信号的变化情况。

景芯SoC v4.0芯片全流程实战


终身辅导、一对一辅导是景芯SoC训练营的特色!

手把手教您搭建SoC,从入门到进阶,带您掌握架构、算法、设计、验证、DFT、后端全流程低功耗!直播视频不定期升级!让您快速超越同龄人!

报名微信:13541390811


景芯全流程课程如下:

  • 景芯SoC设计  视频+文档+实战+一对一终身辅导(视频免费无期限)

  • 景芯SoC验证  视频+文档+实战+一对一终身辅导视频免费无期限

  • 景芯SoC中端  视频+文档+实战+一对一终身辅导视频免费无期限

  • 景芯SoC后端  视频+文档+实战+一对一终身辅导视频免费无期限


进阶课程:

  • 12nm 2.5GHz A72 低功耗DVFS实战培训(价格不到同行1/2)

  • DDR4/3项目实战培训(价格不到同行1/2)



小编逐步将教程、芯片设计全流程知识公布在知识星球,包括设计、验证、DFT、后端全流程知识以及大量技术文档,如果你和我一样渴求知识,不惧怕全流程的知识爆炸,那么欢迎您加入讨论学习,共同进步!



景芯主营业务是design service+一对一芯片辅导培训!


另外小编团队提供芯片Design Service,设计服务包括:

  • 提供SoC、MCU、ISP、CIS等芯片设计、验证、DFT设计服务

  • 提供DDR/PCIE/MIPI/CAN/USB/ETH/QSPI/UART/I2C等IP设计

  • 提供7nm、12nm、28nm、40nm、55nm、65nm、90nm等后端设计

  • 提供高校、企业定制化芯片设计服务、设计培训业务


景芯SoC v4.0芯片全流程实战训练营的宗旨:

手把手教您掌握SoC算法、设计、验证、DFT、后端全流程低功耗!


景芯SoCv3.0,是一款用于【芯片全流程实战培训】的低功耗多媒体SoC!

景芯SoC系统分为三个层次的功耗管理,并集成低功耗RISC-V处理器,集成ITCM SRAM、DTCM SRAM,集成MIPI、ISP、USB、QSPI、UART、I2C、GPIO等IP,采用SMIC40工艺流片。



(一)SoC设计课程,您将学会
  • 高速接口的Verilog设计实现
  • 从图像算法到RTL设计实现
  • MIPI、ISP的Verilog实现与仿真
  • Lint、CDC检查及UVM验证
  • SoC子系统的C驱动仿真
  • 后仿真
仅设计一门课程内容就抵得上其他培训机构的5-6门课程,价格仅其1/6

(二)SoC验证课程,您将学会
  • SoC子系统级的UVM环境搭建
  • SoC子系统级的UVC环境搭建
  • SoC子系统级的VIP环境搭建
  • SoC子系统的DMA SRAM UVM联合验证
  • SoC子系统的UART UVC验证
  • SoC子系统的长包、短包、超长包、毛刺包、包头/包尾错误UVM验证

仅验证一门课程内容就抵得上其他培训机构的3-4门课程,价格仅其1/6


(三)SoC中端课程,您将学会
  • DFT设计(芯片级)
  • Synthesis逻辑综合(芯片级)
  • 低功耗UPF设计、CLP技术
  • formal验证等技术

仅中端一门课程内容就抵得上其他培训机构的4-5门课程价格仅其1/6

(四)SoC后课程,您将学会

  • 低功耗设计

  • 布局布线(低功耗FF flow)
  • StarRC/QRC
  • STA/Tempus
  • 功耗分析
  • DRC/LVS设计

仅后端一门课程内容就抵得上其他培训机构的3-4门课程,价格仅其1/6



课程提供服务器供大家实践!带你从算法、前端、DFT到后端全流程参与SoC项目设计。请联系号主报名!联系微信:135-4139-0811

景芯SoC训练营图像处理的数据通路:



一键式完成C代码编译、仿真、综合、DFT插入、形式验证、布局布线、寄生参数抽取、STA分析、DRC/LVS、后仿真、形式验证、功耗分析等全流程。升级后的芯片设计工程V4.0 flow如下:


SoC一键式执行flow



MIPI DPHY+CSI2解码


数字电路中经典设计:多条通信数据Lane Merging设计实现

数字电路中经典设计:多条通信数据Lane Distribution实现




景芯SoC验证架构


景芯SoC全芯片验证架构:


景芯资深老学员告诉我,留学X国的硕士去外企某芯片巨头薪资是20万+美金!折合RMB超过140万,才25岁左右的小伙子!薪资超140万!


小编去看了glassdoor的工资:

1-3经经验的ASIC Engineer的工资报价有212K美刀,20万美刀。

7-9年经验的ASIC Engineer的工资报价有311K美刀,30万美刀。

当然具体薪资也是看每个候选人的水平以及岗位匹配度。

学历、项目经验都是非常重要的,期待着景芯战友们的更多捷报!走出国门,世界更精彩!景芯SoC项目的正能量之大,小编自己都很震撼,小编一定持续打磨,让景芯战友们一起成功!


景芯SoC UPF低功耗设计

全芯片UPF低功耗设计(含DFT设计)


景芯SoC训练营培训项目,低功耗设计前,功耗为27.9mW。

低功耗设计后,功耗为0.285mW,功耗降低98.9%!



电压降检查:


低功耗检查:


芯片的版图设计V1.0


芯片的版图设计V2.0


芯片的版图设计V4.0


低功耗设计的DRC/LVS,芯片顶层的LVS实践价值极高,具有挑战性!业界独一无二的经验分享。




ISP图像处理

  •    dpc - 坏点校正


  •    blc - 黑电平校正 


  •    bnr - 拜耳降噪

  •    dgain - 数字增益 

  •    demosaic - 去马赛克


  •    wb - 白平衡增益 

  •    ccm - 色彩校正矩阵 

  •    csc - 色彩空间转换 (基于整数优化的RGB2YUV转换公式)

  •    gamma - Gamma校正 (对亮度基于查表的Gamma校正)

  •    ee - 边缘增强


  •    stat_ae - 自动曝光统计 

  •    stat_awb - 自动白平衡统计


CNN图像识别


支持手写数字的AI识别:

仿真结果:仿真识别上图7、2、1、0、4、1、4、9



景芯SoC 3.0 ISP:



景芯SoC V3.0 DFT方案:




如果您和小编一样渴求进步,想掌握芯片设计全流程,欢迎加入小编知识星球,疯狂成长,一起进步!早日成为芯片大佬!


景芯学员们,小编十分感谢你们对景芯的肯定、信任和支持,你们的鼓励让小编十分感激,小编一定更努力精心打磨景芯SoC实战课,我承诺,一定要做到零差评,让大家无论资深还是资浅都能从景芯训练营获得成长!





全栈芯片工程师
十多年SoC、MCU、ISP、CIS芯片设计经验!为客户提供优质的design service!研究生毕业于电子科大,曾就职海思,后加入创业公司任芯片设计经理,创办了景芯SoC全流程芯片设计培训营!
 最新文章