什么是良好的Verilog代码风格?

什么是良好的Verilog代码风格?EMPTY NOT EMPTY 054assigniwr wreq amp full flg 055assignirr 1 d1 056057always begin058 if begin059 wa

欢迎大家来到IT世界,在知识的湖畔探索吧!

来源:http://kellen.wang 作者:kellen.wang

原文链接:http://kellen.wang/zh/what-is-good-verilog-coding-style/

1. 前言

之前在公司负责制定代码规范,费了九牛二虎之力,终于整理出来一份文档。由于保密规定的缘故,无法与大家直接分享这份文档,但是文档中的大部分规范都是我自己长期总结出来的,在这里也与大家分享一下。

2. 代码示范

为求直观,首先贴上一份示范代码,然后我再进行逐条详细解释。

以下代码是我之前做的一个同步FIFO模块,代码如下:

001 //======================================================
002 // Copyright (C) 2015 By Kellen.Wang
003 // , All Rights Reserved
004 //======================================================
005 // Module : sync_fifo
006 // Author : Kellen Wang
007 // Contact :
008 // Date : Jan.17.2015
009 //=======================================================
010 // Description :
011 //========================================================
012 modulesync_fifo #(
013 parameterDEPTH = 32,
014 parameterDATA_W = 32
015 ) (
016 inputwireclk ,
017 inputwirerst_n ,
018 inputwirewreq ,
019 inputwire[DATA_W-1:0] wdata ,
020 outputwirefull_flg ,
021 inputwirerreq ,
022 outputwire[DATA_W-1:0] rdata ,
023 outputwireempty_flg
024 );
025 `ifdef DUMMY_SYNC_FIFO
026 assignfull_flg = 1'd0;
027 assignrdata = 32'd0;
028 assignempty_flg = 1'd0;
029 `else
030 `include "get_width.inc"
031 //====================================================
032 // Constant Definition :
033 //===================================================
034 localparam DLY = 1'd1;
035 localparam FULL = 1'd1;
036 localparam NOT_FULL = 1'd0;
037 localparam EMPTY = 1'd1;
038 localparam NOT_EMPTY = 1'd0;
039 localparam ADDR_W = get_width(DEPTH-1);
040 //==================================================
041 // Variable Definition :
042 //==================================================
043 reg[ADDR_W-1:0] waddr;
044 reg[ADDR_W-1:0] raddr;
045 wire[ADDR_W-1:0] waddr_nxt;
046 wire[ADDR_W-1:0] raddr_nxt;
047 //==================================================
048 // Logic Design :
049 //==================================================
050 assignwaddr_nxt = waddr + 1;
051 assignraddr_nxt = raddr + 1;
052 assignfull_flg = (waddr_nxt == raddr)? FULL : NOT_FULL;
053 assignempty_flg = (waddr == raddr)? EMPTY : NOT_EMPTY;
054 assigniwreq = wreq & ~full_flg;
055 assignirreq = 1'd1;

056

057 always@(posedgeclk ornegedgerst_n) begin
058 if(!rst_n) begin
059 waddr <= #DLY 0;
060 end
061 elseif(wreq & (full_flg == NOT_FULL)) begin
062 waddr <= #DLY waddr_nxt;
063 end
064 end

065

066 always@(posedgeclk ornegedgerst_n) begin
067 if(!rst_n) begin
068 raddr <= #DLY 0;
069 end
070 elseif(rreq & (empty_flg == NOT_EMPTY)) begin
071 raddr <= #DLY raddr_nxt;
072 end
073 end

074

075 //synopsys translate_off
076 `ifdef DEBUG_ON
077 iError_fifo_write_overflow:
078 assert property (@(posedgewclk) disableiff (!rst_n) (iwreq & !full_flg));
079 iError_fifo_read_overflow:
080 assert property (@(posedgerclk) disableiff (!rst_n) (irreq & !empty_flg));
081 `endif
082 //synopsys translate_on

083

084 //====================================================
085 // Sub-Module :
086 //====================================================
087 shell_dual_ram #(
088 .ADDR_W (ADDR_W ),
089 .DATA_W (DATA_W ),
090 .DEPTH (DEPTH )
091 ) u_shell_dual_ram (
092 .wclk (clk ),
093 .write (iwreq ),
094 .waddr (waddr ),
095 .wdata (wdata ),
096 .rclk (clk ),
097 .read (irreq ),
098 .raddr (raddr ),
099 .rdata (rdata )
100 );
101 `endif // `ifdef DUMMY_SYNC_FIFO
102 endmodule

下面详细讲解一下我在进行这个模块设计的时候遵循了哪些希望向大家推荐的代码风格。

3. 代码风格

3.1 规则总览

在设计这个模块的时候,我主要遵从了以下几条规则:

  1. Verilog2001标准的端口定义
  2. DUMMY模块
  3. 逻辑型信号用参数赋值
  4. 内嵌断言
  5. memory shell

3.2 规则解释

接下来我们逐一解释以下为什么要这么做。

3.2.1 Verilog2001标准的端口定义

01 modulesync_fifo #(
02 parameterDEPTH = 32,
03 parameterDATA_W = 32
04 ) (
05 inputwireclk ,
06 inputwirerst_n ,
07 inputwirewreq ,
08 inputwire[DATA_W-1:0] wdata ,
09 outputwirefull_flg ,
10 inputwirerreq ,
11 outputwire[DATA_W-1:0] rdata ,
12 outputwireempty_flg
13 );

相对于verilog1995的端口定义,这种定义方式将端口方向,reg或wire类型,端口位宽等信息都整合到了一起,减少了不必要的重复打字和出错几率,也使得代码长度大大缩短,非常紧凑。另外,用于控制模块编译的例化参数都被放置于端口定义之前,有利于在模块例化时进行配置,也是IP化模块最好的编写方式。例如在这个同步fifo设计中,我希望这个模块的深度和数据位宽是可以配置的,那么我就把这2个参数放在端口声明的前面。另外要说明的一点是,一旦在模块中出现了可以配置的例化参数,最好在文件头的描述部分增加有关这些参数有效值范围的说明。

3.2.2 DUMMY模块

在做项目的时候,一个大的系统会被分割成很多细小的部分,由不同的人负责,设计完成后上传到具有版本管理功能的服务器上。有时候有的人忘记在上传代码之前进行严格测试,或者根本传错了版本,就会造成其他人仿真报错。有时候我们希望用FPGA进行原型验证,但是有的模块设计根本还没有完成,而反复修改FPGA顶层文件又会显著提高版本出错的几率,最好的办法就是将这些有问题的模块临时替换成dummy模块。dummy模块不仅可以隔离问题模块,还可以显著加速仿真过程,可谓一举两得。传统上大家在完成设计之后会另外建立一个只有接口代码的空文件,例如dummy_sync_fifo.v,当需要将sync_fifo变成dummy的时候,就将文件清单中的文件名改掉,但这样的方式会增加文件,容易造成管理的混乱,反复修改文件清单显然也不是一个好的做法。我推荐的dummy方式如下所示:

1

`ifdef DUMMY_SYNC_FIFO

2

assignfull_flg = 1'd0;

3

assignrdata = 32'd0;

4

assignempty_flg = 1'd0;

5

`else

6

...

7

`endif // `ifdef DUMMY_SYNC_FIFO

这里推荐的方式是在模块的顶层文件中写一个宏控制的综合控制逻辑,当DUMMY_SYNC_FIFO宏被定义的时候,综合工具就只会将整个模块综合成没有任何逻辑的dummy模块了。

3.2.3 逻辑型信号用参数赋值

很多人做RTL设计的时候为了省事,在代码中对数值型信号和逻辑型信号完全不做区分,用同样的方式赋值。如果这种时候稍微做一点点改变,就能让你的代码可读性大大提高,例如:

1 assignfull_flg = (waddr_nxt == raddr);

1 localparam FULL = 1'd1;
2 localparam NOT_FULL = 1'd0;
3 assignfull_flg = (waddr_nxt == raddr) ? FULL : NOT_FULL;

你觉得哪一个阅读起来更直观?而将所有逻辑型信号的数值参数化的另外一个好处,就是在如veridi这样业界良心的仿真软件中,你可以在仿真波形中直接看到FULL或NOT_FULL这样的文字参数,大大提高了波形的友好程度,比起你在那痛苦地目测这根线到底是高电平还是低电平轻松多了。

3.2.4 内嵌断言

有的IC设计工程师觉得断言是验证工程师才需要学习的东西,其实不然,好的模块内嵌断言可以及时发现模块内部的错误状态,防止模块的不当使用,极大地提高模块的验证效率。但是,断言属于不可综合的语句(在ZEBU这种变态系统中使用除外),直接放在模块设计代码中需要进行必要的特殊处理,如下所示:

1 //synopsys translate_off
2 `ifdef DEBUG_ON
3 iError_fifo_write_overflow:
4 assert property (@(posedgewclk) disableiff (!rst_n) (iwreq & !full_flg));
5 iError_fifo_read_overflow:
6 assert property (@(posedgerclk) disableiff (!rst_n) (irreq & !empty_flg));
7 `endif
8 //synopsys translate_on

首先使用了综合指令的注释synopsys translate_off以防综合工具对这段语句进行综合,然后再加上一个DEBUG_ON的宏进行二次保护。上例中的断言可以保证这个sync_fifo在使用过程中一旦发生“过读”或者“过写”就会立刻打印报错信息。

3.2.5 memory shell

在IC设计中经常需要用到memory,memory通常不是用verilog描述实现的(这种方式实现不是不可以,而是性价比太低了),而是需要调用FPGA里的存储资源,或是由后端生成。但是在进行仿真的时候,我们不妨用verilog写一个行为模型来替代实现。这种原型验证和仿真验证的不一致,导致了跟dummy模块设计一样的麻烦,那就是需要对代码进行反复修改。另外,在不同项目中有可能根据不同的情况采用不同的后端物理层来生成memory,或者由于不同的工艺生成不同的memory,这种memory的接口协议可能多少会有一些不一样,同样会导致需要在不同工艺和项目中修改IP代码,造成出错的风险。比较好的做法就是像以下例子中那样使用一个memory shell来隔离这种修改。

01 shell_dual_ram #(
02 .ADDR_W (ADDR_W ),
03 .DATA_W (DATA_W ),
04 .DEPTH (DEPTH )
05 ) u_shell_dual_ram (
06 .wclk (clk ),
07 .write (iwreq ),
08 .waddr (waddr ),
09 .wdata (wdata ),
10 .rclk (clk ),
11 .read (irreq ),
12 .raddr (raddr ),
13 .rdata (rdata )
14 );

这个memory shell定义了一组标准的接口,用于在IP模块中进行例化。而在这个memory shell模块内部,可使用宏控制的综合分支控制语句根据不同情况综合不同的memory或仿真模型。当同一个size的memory被多个模块调用的时候,这种设计的好处更加明显,因为当接口协议变化时,你只需要改动memory shell文件内部的连接逻辑就可以了,这个shell在不同模块中的例化语句都是不需要改动的。

4. 总结

良好的代码风格可以提高代码的可读性,减少犯错机会,也可以提高代码调试的效率,但积累良好的代码风格不是一朝一夕的事,需要一步一个脚印,一点点积累。本文长期更新,如果你有好的想法和建议,欢迎在本文底部留言。另外也欢迎其他verilog语言学习者与我共同交流,有任何疑问可以到本博“答疑专区”提出,我必知无不言,言无不尽。

推荐阅读:

关注EETOP公众号,后台输入 芯片合集,查看如下推荐文章

  1. 精品课程:先进制程工艺集成电路ESD电路如何设计?
  2. 精品课程:集成电路闩锁效应与工程应用

  3. 7nm : 台积电 VS 三星

  4. 格芯成都厂为何会停摆?

  5. 半导体的过去、现在和未来

  6. 芯片制造新模式–像搭积木一样造芯片

  7. 大型IC设计中心的IT环境

  8. 芯片设计中电迁移和IR压降的挑战和技术

  9. 芯片面积太大了!三星 Exynos 9820 内核照片曝光

  10. 麒麟980内核照片:NPU在哪呢?

  11. 六家 5G 基带芯片介绍及市场剖析

  12. SoC与5G基带分居了 原因是?

  13. IC大牛10多年的设计分享:数字典型电路知识结构地图及代码实现
  14. 关于华为海思,这篇文章值得一看
  15. 俄国没有高端芯片,为什么却能造出一流武器?
  16. 别拦我,我要做芯片!
  17. 芯片春秋·ARM传
  18. 中国芯酸往事
  19. 印度芯酸往事
  20. 国防军工芯片行业深度报告
  21. 一位美国芯片公司华人高管对中国芯片行业的思考
  22. 学习、积累、交流-IC设计高手的成长之路
  23. 女生学微电子是一种什么体验?
  24. MIPS架构开放了,10天设计一款完全免费的MIPS处理器(附源码)
  25. 性能之殇:从冯·诺依曼瓶颈谈起
  26. AI芯片设计与开发概览
  27. AI 芯片和传统芯片有何区别?
  28. 一个资深工程师老王关于AI芯片的技术感悟
  29. 隔隔壁老王:AI芯片与她怎么选?
  30. 终于有人把云计算、大数据和人工智能讲明白了!
  31. 尺寸减半、功率翻番!——氮化镓技术的现在和未来
  32. 逻辑综合 Design Compiler 资料大全
  33. 集成电路制造技术简史
  34. 半导体科普:IC芯片设计及生产流程

  35. 晶圆代工争霸战四部曲(了解各晶圆厂的前世今生,非常详细!)

  36. 非常详细的半导体工艺流程讲解

  37. 射频半导体工艺介绍

  38. 版图中Metal专题——线宽选择
  39. 有哪些只有IC工程师才能get到的梗?
  40. 为什么7nm工艺制程这么难?从7nm看芯片行业的“贫富差距”
  41. 什么是台积电的SoIC?
  42. RISC-V打入主流市场的诸多问题
  43. RISC-V架构有何优势?
  44. 关于RISC-V 终于有人讲明白了!
  45. RISC-V软核+FPGA 航天军工产品设计新机遇

  46. ASIC低功耗设计实例分析及书籍推荐
  47. ASIC设计学习总结(包括:工具及书籍文档推荐 、软件环境搭建、RTL设计、验证、工艺库说明、形式验证、综合等共12部分)

  48. ASIC设计学习总结之可测性设计及书籍推荐
  49. ASIC设计学习总结之静态时序分析概要及书籍推荐
  50. ASIC设计学习总结之工具及书籍文档
  51. 小芯片大价值 | ASIC工程师如此值钱到底为什么?
  52. 芯片面积估计方法简介
  53. 自主研发通信芯片有多难?通信行业老兵告诉你,没那么简单!
  54. RISC-V精简到何种程度?能省的都省了!
  55. 多核CPU设计及RISC-V相关资料
  56. 时序设计与约束资料汇总
  57. 模拟版图讲义
  58. GDSII转DEF的flow简介
  59. 机器学习将越来越依赖FPGA和SoC
  60. Verilog基本功之:流水线设计Pipeline Design
  61. 先进封装发展趋势分析PPT
  62. 先进封装发展现状分析PPT
  63. 可测试性设计与ATPG
  64. 麒麟980是如何诞生的?敢于失败,勇于尝试!(附:华为早期型号处理器研发过程)
  65. IC模拟版图设计讲义
  66. Verilog CPU设计实例
  67. CPU、GPU 和 TPU 都是如何工作的?有什么区别?TPU为什能碾压GPU?
  68. 流行数十年的主流芯片架构正在悄然巨变
  69. 与IC设计产业相比,EDA产业发展的难处有哪些?
  70. 千兆以太网 TCP, UDP协议, FPGA实现
  71. SoC功能仿真验证技术分享
  72. 对验证的一些理解
  73. IC Layout 脚本分享
  74. 异构整合,半导体下一个关键
  75. 用Python编写FPGA以太网MAC(附源码下载方式)
  76. 用python进行机器学习
  77. 直接产生verilog的testbench的python脚本
  78. 干货!ASIC牛人之经典总结
  79. ASIC前后端设计经典的细节讲解
  80. 资料分享|时序分析
  81. Verilog基本电路设计(包括:时钟域同步、无缝切换、异步FIFO、去抖滤波)
  82. 128点 FFT verilog代码分享
  83. 硬核实现 ”春节快乐” 代码分享

  84. FPGA在人工智能时代的独特优势

  85. 什么是FPGA工程师的核心竞争力

  86. 从芯片到系统:FPGA加速卡的发展历程与展望

  87. 基于FPGA的深度学习加速器的挑战与机遇

  88. FPGA正变成“瑞士军刀”, 越来越像SoC
  89. 数字前端及FPGA设计相关书目泛读及点评
  90. 数字IC设计学习流程
  91. 防止毛刺的时钟切换电路的设计思想
  92. 函数发生器实现方法简述
  93. 用FPGA实现简单的UDP/IP通信(采用纯硬件语言,非软核)
  94. 数字集成电路设计入门 –从HDL到版图
  95. 同步器的设计
  96. 数字IC工程师的技能树
  97. 微电子树
  98. IC设计完整流程及工具简述
  99. IC芯片设计及生产流程
  100. IC 芯片的成本从哪里来?
  101. 说说芯片设计这点事
  102. 关于IC设计的想法
  103. 数字IC设计的完整流程(非常详细!)
  104. 数字IC Design技术全局观(110页PPT!)
  105. ASIC设计中各个阶段需要注意的问题
  106. 深入浅出谈谈Setup和Hold
  107. 大话setup time与hold time
  108. 静态时序分析中的setup和hold存在负值的问题
  109. 关于静态时序分析STA的切入点及方法
  110. 静态时序分析(STA)基础与应用
  111. 组合逻辑设计中的毛刺现象
  112. 数字IC设计工程师的发展前景如何?
  113. 一个合格数字IC设计工程师的知识结构
  114. RS编解码Verilog代码RS(255,247)
  115. RS(255,239)编解码算法,verilog代码以及详细讲解
  116. 非常详细的Verilog讲义教程,共472页
  117. 一个简单的8位处理器完整设计过程及verilog代码
  118. 网友经验分享: Verilog设计注意
  119. 关于同步与异步时序的Verilog一例
  120. 半导体、微电子专业英语词汇汇总
  121. 以DAC为例介绍SpectreVerilog数模混合电路仿真方法
  122. IC设计与验证工程师友谊的小船说翻就翻
  123. 数字IC设计基本流程和所使用的工具
  124. 国外的数字IC面试题(非常详细,有答案)
  125. 读懂用好TimingReport
  126. 异步FIFO设计(非常详细,图文并茂,值得一看!)
  127. 平行宇宙的追逐–异步FIFO控制器的设计
  128. 异步FIFO为什么使用格雷码
  129. 数字IC设计工程师笔试面试经典100题(1~50)
  130. 数字IC设计工程师笔试面试经典100题(51~100)
  131. 同步/异步设计及metastability
  132. 为什么越来越多的数据中心使用 FPGA ?
  133. 基于FPGA的数字识别的实现
  134. FPGA设计中遇到的奇葩问题之“芯片也要看出身”
  135. FPGA就像是一张精密的画布 – DSP 专家给你一个选择 FPGA 的理由
  136. 聊聊FPGA/CPU/PCIE/Cache-Coherency/CAPI
  137. FPGA是如何实现30倍速度的云加速的?都加速了哪些东西?
  138. 一文了解 FPGA 发展之路
  139. 【干货】腾讯云FPGA的深度学习算法
  140. 云中的机器学习:FPGA 上的深度神经网络
  141. 网友吐槽:9年FPGA工作总结,苦海无涯,穷逼多
  142. FPGA数字电路设计经验分享(干货!)
  143. 干货!基于FPGA之低速协议设计实验手稿及源码
  144. FPGA设计高级进阶
  145. CRC循环冗余校验的原理与算法及FPGA实现
  146. 关于FPGA设计仿真和硬件实测不一致问题的讨论
  147. 如何扩展FPGA的工作温度范围
  148. 如何用单个 Xilinx FPGA 芯片数字化数百个信号?
  149. 一个FPGA工程师的个人工作经历总结
  150. 让 FPGA 视觉功能大众化
  151. FPGA电源简介
  152. FPGA实现除法运算
  153. 利用基于FPGA的模糊控制器控制蔗糖提取
  154. 利用 Artix-7 FPGA 设计高性能 USB 器件
  155. FPGA应用文章:采用 Zynq SoC 测试新型存储器技术芯片
  156. 基于XILINX的FPGA的AES 128bit加解密算法
  157. 利用Xilinx FPGA实现高效并行实时上采样
  158. FPGA实战演练逻辑篇(1)-FPGA与ASIC,FPGA与CPLD,VERILOG与VHDL
  159. FPGA实战演练逻辑篇(2)-FPGA应用领域及优势,FPGA开发流程
  160. FPGA实战演练逻辑篇(3)FPGA板级电路设计五要素
  161. 基于ARM的CRC算法和基于FPGA的算法性能比较
  162. 如何防止基于FPGA的项目误入歧途
  163. Zynq片内XADC应用笔记
  164. Zynq器件时钟子系统介绍
  165. 建立及保持时间、建立及保持余量的理解
  166. 软核MicroBlaze的C编程经验及技巧
  167. Tcl在Vivado中的应用
  168. Vivado使用详细介绍1:创建工程,编写代码,行为仿真,Testbench
  169. Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写
  170. Vivado的使用介绍3:使用IP核
  171. Xilinx FPGA入门连载2:Modelsim SE 10.1安装
  172. Xilinx FPGA入门连载4:ISE中使用notepad++的关联设置
  173. Xilinx FPGA入门连载6:ISE与Modelsim联合仿真之关联设置
  174. Xilinx FPGA入门连载7:新建工程
  175. Xilinx FPGA入门连载8:Verilog源码文件创建与编辑
  176. Xilinx FPGA入门连载9:Verilog语法检查
  177. Xilinx FPGA入门连载10:Modelsim仿真验证
  178. Xilinx FPGA入门连载11:PWM蜂鸣器驱动之功能概述
  179. Xilinx FPGA入门连载12:PWM蜂鸣器驱动之引脚分配
  180. Xilinx FPGA入门连载13:PWM蜂鸣器驱动之综合、实现与配置文件产生
  181. 跟着我从零开始入门FPGA(一周入门系列):第一天:Verilog语法
  182. 跟着我从零开始入门FPGA(一周入门系列):第二天:组合逻辑设计
  183. 跟着我从零开始入门FPGA(一周入门系列):第三天:时序逻辑设计
  184. 跟着我从零开始入门FPGA(一周入门系列):第四天:
  185. 跟着我从零开始入门FPGA(一周入门系列):第五天:阻塞和非阻塞
  186. 跟着我从零开始入门FPGA(一周入门系列)-第六天:有限状态机
  187. 跟着我从零开始入门FPGA(一周入门系列):第七天:设计一个只有4条指令的CPU
  188. FPGA入门连载一:0和1——精彩世界由此开始
  189. FPGA入门连载二:Verilog/VHDL语法学习的经验之谈
  190. FPGA入门连载三:表面现象揭秘——逻辑关系
  191. FPGA入门连载四:内里本质探索——器件结构
  192. FPGA入门连载五:第一个工程实例
  193. Vivado使用详细介绍2综合实现管脚分配时钟设置烧写
  194. 基于FPGA的DDR3多端口读写存储管理设计
  195. 在低成本FPGA开发板上实现Oberon系统
  196. 全可编程抽象化:你的编程你做主
  197. XILINX FPGA FIFO使用技巧
  198. 智能视觉系统中如何处理多图像传感器?
  199. FPGA时钟和复位电路设计
  200. FPGA设计,视时序为一切
  201. 在FPGA设计中,时序就是全部
  202. 利用FPGA对大规模MIMO信道进行特性描述
  203. 如何将PetaLinux移植到Xilinx FPGA上
  204. 关于FPGA设计仿真和硬件实测不一致问题的讨论
  205. FPGA适合用在哪儿?OpenCL,C,和C++语言对FPGA和全SoC有什么用?
  206. 入门贴:FPGA中的INOUT接口和高阻态
  207. 科普:关于处理器你所需要知道的一切
  208. 科普:海思CPU的设计制造过程,看了以后真觉得华为不容易
  209. 网友最爱看的处理器IC设计相关图书
  210. 一文教你读懂芯片后端报告(做前端的必看!)

  211. 干货:数字IC后端设计全局观–数字后端做什么从RTL到GDS(137页PPT)
  212. 科普:海思CPU的设计制造过程,看了以后真觉得华为不容易
  213. CPU DIE Photo 大全
  214. 普及贴:CPU的发展历程(X86篇)
  215. 一个从刚入大学就励志做CPU设计到毕业后如愿以偿的故事!
  216. 终于讲清楚了,看完这篇你也可以设计CPU了
  217. 科普:GPU是如何工作的?与CPU、DSP有什么区别?
  218. 在CPU IP授权上,ARM 是怎样战胜MIPS的?
  219. 从沙子到芯片,看看CPU是如何制造出来的
  220. 深度分析国产龙芯新架构CPU
  221. CPU诞生鲜为人知的故事:首款8位CPU并不是Intel的,仅比4004晚了两个月
  222. 基于RISC-V架构的开源处理器及SoC研究综述
  223. RISC-V与DSA!计算机架构宗师Patterson与Hennessy 演讲实录
  224. RISC-V资料大全中文版!
  225. 科普:ARM与X86 CPU架构对比区别
  226. 从零到精通–处理器(CPU)的设计之路
  227. 说一说CPU与GPU的区别
  228. 自己动手设计专用处理器
  229. 励志!他设计了先进的指令集,申请三项专利,并设计出了自己的CPU!
  230. 分享|开源GPU,RTL源代码+验证环境+文档
  231. Analog IC 难在哪里,结构?参数?版图?系统?(最新更新)
  232. 从一篇Datasheet中能学到什么?
  233. IEEE JSSC论文分享:30GHz low-flicker noiseOscillator
  234. 彻底厘清振荡器中Flicker Noise问题–IEEE TCAS-II(2019)论文分享
  235. 全球顶尖芯片专家揭秘【低功耗芯片设计】真相
  236. 关于低功耗、低电压的bandgap电路
  237. Low power RTL 设计优化,同等工艺下让你的设计功耗更低!
  238. 两篇关于RF PA 的博士论文
  239. PLL经典讲义
  240. 神作:带宽!
  241. 功率谱密度
  242. SerDes概述
  243. 深入浅出聊抖动(Jitter)
  244. 动态失调消除的方法(模拟IC设计黑科技!)
  245. 先进制程工艺集成电路ESD电路如何设计?
  246. ESD讲义
  247. 成为一个资深Analog/RF IC Designer 需要怎样的经历?
  248. 功率半导体(VDMOS,IGBT,TVS)讲义
  249. 相比CPU,高性能模拟器件更担心被禁运,那么研发难点在哪儿?
  250. RF PA 那些事
  251. AACD 2017 Hybrid ADCs 资料大全
  252. 拉扎维16年写的-TSPC Logic
  253. 功率半导体器件基础(Baliga)(1085页)
  254. 模拟电路&模拟IC设计
  255. 模拟数字产品开发流程
  256. SPICE简史
  257. 干货分享:测量自己的心电图(从理论到电路)
  258. 好的模拟IC工程师应该具有的素养
  259. 模拟IC设计领域的经典之作
  260. 是否需要模拟后仿真?
  261. 极点零点之我见
  262. 六本经典模拟IC书籍精彩评论及总结
  263. 模拟设计的100条圣经
  264. 模拟电路学习入门的建议
  265. 模拟IC流片经验分享
  266. 模拟IC年薪几十万师兄的模电学习经历
  267. 想成为一名模拟ic设计师在本科期间应该做哪些准备?
  268. 模拟电路设计的九重进阶
  269. AnalogIC难在哪里,结构?参数?版图?系统?
  270. 模拟集成电路设计第二讲:传输函数,零极点的形成及时域响应
  271. 我还要不要继续学习模拟设计–一个跨行硕士的疑问
  272. 如何学习模拟IC设计
  273. 模拟大牛谈模拟工程师身价及发展方向
  274. 模拟电路应知应会200问
  275. 模拟后仿真的几种做法以及优缺点
  276. 关于模拟地与数字地很意思的解释
  277. 干货!深入浅出射频模拟电路设计经典讲义
  278. 伏模之路–模拟电路学习感悟
  279. 模拟IC设计真的很难学吗?
  280. 模拟IC正向设计流程总结
  281. 模拟学习感悟与总结
  282. 模拟滤波设计讲义
  283. 拉扎维模拟CMOS集成电路设计讲义Part3
  284. 拉扎维模拟CMOS集成电路设计讲义Part2
  285. 模拟学习感悟与总结


点击阅读原文查看更多

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/93920.html

(0)
上一篇 53分钟前
下一篇 40分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信