VERILOG语言编写标准规范.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VERILOG 语言 编写 标准规范
- 资源描述:
-
VERILOG语言编写规范 1 目 本规范目是提高书写代码可读性 可修改性 可重用性,优化代码综合和仿真成果,指引设计工程师使用VerilogHDL规范代码和优化电路 ,规范化公司ASIC设计输入 从而做到 1. 逻辑功能对的 2.可迅速仿真 3. 综合成果最优 如果是hardware model)4. 可读性较好。 2 范畴 本规范涉及Verilog HDL编码风格, 编码中应注意问题, Testbench编码等。 本规范合用于Verilog model任何一级( RTL behavioral,gate_level), 也合用于出于仿真,综合或两者结合目而设计模块。 3 定义 Verilog HDL : Verilog 硬件描述语言 FSM : 有限状态机 伪途径 : 静态时序分析( STA) 以为是时序失败, 而设计者以为是对的途径 4 引用原则和参照资料 下列原则包括条文 通过在本原则中引用而构成本原则条文 在原则出版时 所示版本 均为有效 所有原则都会被修订 使用本原则各方应探讨 使用下列原则最新版本也许性 Actel HDLCoding Style Guider Sun Microsystems Revision 1.0 VerilogStyle and Coding Guidelines 5 规范内容 5.1 Verilog 编码风格 本章节中提到Verilog编码规则和建议适应于 Verilog model任何一级( RTL behavioral,gate_level) 也合用于出于仿真, 综合或两者结合目而设计模块。 5.1.1 命名规范 选取故意义信号和变量名, 对设计是十分重要。 命名包括信号或变量诸如出处, 有效状态等基本含义 下面给出某些命名规则。 1. 用故意义而有效名字 有效命名有时并不是规定将功能描述出来 如 For ( I = 0;I < 1024;I = I + 1 ) Mem[I]<= #1 32’b0; For 语句中循环指针I 就没必要用loop_index作为指针名。 2. 用连贯缩写 长名字对书写和记忆会带来不便, 甚至带来错误 采用缩写时应注意同一信号在模块中一致性。 缩写例子如下: Addr address Pntr pointer Clk clock Rst reset 3. 用名字前加小写n表达低电平有效 高电平有效信号不得如下划线表达 短暂 引擎信号建议采用高有效 如 nRst, nTrdy, nIrdy nIdsel. 4. 大小写原则 名字普通首字符大写 ,别的小写 (但parameter,integer 定义数值名可所有用大写),两个词之间要用下划线连接(或第二个单词首字母大写) 如 :Packet_addr, Data_in, Mem_wr ,Mem_ce_ Or:PacketAddr, DataIn, MemWr ,MemCe 5.全局信号名字中应包括信号来源某些信息 如:D_addr[7:2] 这里 D 指明了地址是解码模块(Decoder module)中地址. 6. 同一信号在不同层次应保持一致性 7. 自己定义常数 类型等用大写标记 如:parameter CYCLE=100. 8. 避免使用保存字 如 in out x z等不可以做为变量 端口或模块名 9. 添加故意义后缀 使信号名更加明确 惯用后缀如下 芯片双向信号 -xbio 芯片三态输出 _xz 芯片漏极开路输出 _xod 芯片原始输出信号 _xo 芯片原始输入信号 _xi 下降沿有效寄存器 _f 连到三态输出信号 _z 寄存前信号 _next 时钟信号 _Clk 5.1.2 Modules 1.顶层模块应只是内部模块间互连 Verilog设计普通都是层次型设计, 也就是在设计中会浮现一种或各种模块, 模块间调用在所难免。 可把设计比喻成树, 被调用模块就是树叶, 没被调用模块 就是树根, 那么在这个树根模块中, 除了内部互连和模块调用外, 尽量避免再做逻辑, 如:不能再浮现对reg变量赋值等, 这样做目是为了更有效综合, 由于在顶层模块中浮现中间逻辑 ,Synopsys design compiler 就不能把子模块中逻辑综合到最优。 2. 每一种模块应在开始处注明文献名 功能描述 引用模块 设计者 设计时间及版 权信息等 如 /* =========================== *\ Filename ﹕ SPI_M.v Author ﹕whq Description ﹕File description Called by ﹕Top module Revision History ﹕time yy-mm-dd Revision 1.0 Email ﹕ Copyright(c)1999,~~~~~~~~~~~~~ ,All right reserved /* =========================== *\ 3. 不要对Inpu t进行驱动, 在module 内不要存在没有驱动信号, 更不能在模块端口中浮现没有驱动输出信号, 避免在仿真或综合时产生warning, 干扰错误定位 4. 每行应限制在80个字符以内 以保持代码清晰 美观和层次感 一条语句占用一行 如果较长,超过80个字符 则要换行。 5. 电路中调用 module 名用 Uxx 标示。 向量大小表达要清晰, 采用基于名字(name_based) 调用而非基于顺序 (order_based)。 Instance UInstance2( .DataOut (DOUT ), .DataIn (DIN ), .Cs_ (Cs_ ) ); 6. 用一种时钟上沿或下沿采样信号, 不能一会儿用上沿, 一会儿用下沿。 如果既要用上沿又要用下沿, 则应提成两个模块设计。 建议在顶层模块中对Clock做一非门,在层次模块中如果要用时钟下沿就可以用非门产生PosedgeClk_ , 这样好处是在整个设计中采用同一种时钟沿触发, 有助于综合。 基于时钟综合方略 7. 在模块中增长注释 对信号, 参量, 引脚, 模块, 函数及进程等加以阐明, 便于阅读与维护。 8. Module 名要用大写标示, 且应与文献名保持一致。 如 Module DFF_ASYNC_RST( Reset, Clk, Data, Qout ); 严格芯片级模块划分 只有顶层涉及IO引脚(pads), 中间层是时钟产生模块, JTAG, 芯片内核(CORE),这样便于对每个模块加以约束仿真, 对时钟也可以仔细仿真。 模块输出寄存器化 对所有模块输出加以寄存( 如图1) 使得输出驱动强度和输入延迟可以预测,从而使得模块综合过程更简朴 - 输出驱动强度都等于平均触发器驱动强度 图1 9.将核心途径逻辑和非核心途径逻辑放在不同模块 保证DC可以对核心途径模块实现速度优化,而对非核心途径模块实行面积优化 在。同一模块DC无法实现不同综合方略,将有关组合逻辑放在同一模块,有助于DC对其进行优化 由于DC普通不能越过模块边界来优化逻辑。 5.1.3 Net and Register 1. 一种reg变量只能在一种always语句中赋值 2. 向量有效位顺序定义普通是从大数到小数 尽管定义有效位顺序很自由, 但如果采用毫无规则定义势必会给作者和读代码 人带来困惑 ,如 Data[-4: 0], 则 LSB[0][-1][-2][-3][-4]MSB, 或 Data[0: 4] 则 LSB[4][3][2][1][0]MSB 这两种状况定义都不太好, 推荐Data[4: 0]这种格式定 义。 3.对net和register类型输出要做声明 在PORT中。如果一种信号名没做声明 Verilog将假定它为一位宽wire变量。 4. 线网各种类型。 寄存器类型。 5.1.4 Expressions 1. 用括号来表达执行优先级 尽管操作符自身有优先顺序, 但用括号来表达优先级对读者更清晰, 更故意义。 If ((alpha < beta) && (gamma >= delta)).... 比下面表达更合意 If (alpha < beta && gamma >= delta)...(判断逻辑应是化简过后最简形式!) 2. 用一种函数(function)来代替表达式多次重复 如果代码中发现多次使用一种特殊表达式 ,那么就用一种函数来代替, 这样在后来版本升级时更便利, 这种概念在做行为级代码设计时同样使用, 经常使用一组描述可以写到一种任务(task)中。 5.1.5 IF 语句 1. 向量比较时 比较向量要相等 当比较向量时 verilog将对位数小向量做0 扩展以使它们长度相匹配 它自动 扩展为隐式 建议采用显示扩展 这个规律同样合用于向量同常量比较 Reg Abc[7:0]; Reg Bca[3:0]; ...... If (Abc= = {4’b0,Bca})begin ....... If (Abc= = 8’b0) begin 2. 每一种If 都应有一种else 和它相相应 在做硬件设计时, 常规定条件为真时执行一种动作而条件为假时执行另一动作 虽然以为条件为假不也许发生, 没有else也许会使综合出逻辑和,RTL级逻辑不同。如果条件为假时不进行任何操作, 则用一条空语句。 always @(Cond) begin if (Cond) DataOut<= DataIn; End // Else 以上语句DataOut会综合成锁存器. 3. 应注意If ..else if ...else if ...else 优先级 4. 如果变量在If-else 或case 语句中做非完全赋值 则应给变量一种缺省值。即 V1 = 2’b00; V2 = 2’b00; V3 = 2’b00; If (a = = b) begin V1 = 2’b01;//V3 is not assigned V2 = 2’b10; End Else if (a = = c) begin V2 = 2’b10;//V1 is not assigned V3 = 2’b11; End Else 5.1.6 case 语句 1. case语句普通综合成一级多路复用器 (图右边某些), 而if-then-else则综合成优先编码串接各种多路复用器, 如图左边某些 普通 使用case 语句要比if语句快, 优先编码器构造仅在信号到达有先后时使用。 条件赋值语句也能综合成多路复用器, 而case 语句仿真要比条件赋值语句快。 2 所有Case 应当有一种default case 容许空语句 Default :; 5.1.7 Writing functions 1. 在function最后给function赋值 Function CompareVectors;// (Vector1,Vector2,Length) Input [199:0] Vector1,Vector2; Input [31:0] Length; //local variables Integer i; RegEqual; Begin i= 0; Equal = 1; While ((i<Length)&& Equal) begin If (Vector 2[i] !== 1’bx)begin If (Vector1[i]!== Vector2[i]) Equal = 0; Else ; End i= i+ 1; End CompareVectors= Equal; End Endfunction //compareVectors//比较器 3. 函数中避免使用全局变量 否则容易引起HDL行为级仿真和门级仿真差别。如 function ByteCompare input [15:0] Vector1 input [15:0] Vector2 input [7:0] Length begin if (ByteSel) // compare the upper byte else // compare the lower byte end endfunction// ByteCompare 中使用了全局变量ByteSel 也许无旨在别处修改了, 导致错误成果 。最佳直接在端口加以定义。 ( 注意 函数与任务调用均为静态调用。) 5.1.8 Assignment 1. Verilog 支持两种赋值 过程赋值(procedural) 和持续赋值(continuous。。 过程赋值用于过程代码( initial,always,task or function) 中给reg 和 integer 变量tim\realtime real赋值, 而持续赋值普通给wire 变量赋值。 2. Always @(敏感表) 敏感表要完整, 如果不完整, 将会引起仿真和综合成果不一致 always @(d or Clr) if (Clr) q = 1'b0; else if (e) q = d; 以上语句在行为级仿真时e变化将不会使仿真器进入该进程,导致仿真成果错误 3. Assign/deassign 仅用于仿真加速 仅对寄存器有用 4. Force/release 仅用于debug 对寄存器和线网均有用 5. 避免使用Disable 6.对任何reg赋值用非阻塞赋值代替阻塞赋值 reg 非阻塞赋值要加单位延迟 但异 步复位可加可不加 =与 《=区别 Always @(posedge Clkor negedge Rst_) Begin If (!Rst_)// prioritize the “if conditions”in if statement Begin Rega <=0; //non_blockingassignment Regb <=0; End Else if (Soft_rst_all) Begin Rega <= #u_dly0;//add unit delay Regb <= #u_dly0; End Else if (Load_init) Begin Rega <= #u_dly init_rega; Regb <= #u_dly init_regb; End Else Begin Rega <= #u_dly Rega<< 1; Regb <= #u_dly St_1; End End// end Rega,Regbassignment. 5.1.9 Combinatorial Vs Sequential Logic 1. 如果一种事件持续几种时钟周期 ,设计时就用时序逻辑代替组合逻辑。 如 Wire Ct_24_e4; //it ccarriesinfo. Last over several clock cycles Assign Ct_24_e4= (count8bit[7:0]>= 8’h24) & (count8bit[7:0]<= 8’he4); 那么这种设计将综合出两个8 比特加法器 并且会产生毛刺,对于这样电路,要采用时序设计,代码如下; Reg Ct_24_e4; Always @(poseddge Clk or negedge Rst_) Begin If (!Rst_) Ct_24_e4<= 1’b0; Else if (count8bit[7:0]= = 8’he4) Ct_24_e4<= #u_dly1’b0; Else if (count8bit[7:0]= = 8’h23) Ct_24_e4<= #u_dly1’b1; Esle; 2. 内部总线不要悬空 在default状态 要把它上拉或下拉 Wire OE_default; Assign OE_default= !(oe1| oe2| oe3); Assign bus[31:0]= oe1?Data1[31:0]: oe2?Data2[31:0]: oe3?Data3[31:0]: oe_default?32’h0000_0000 : 32’hzzzz_zzzz; 5.1.10Macros 1. 为了保持代码可读性,惯用 “`define” 做常数声明 2. 把“`define”放在一种独立文献中参数( parameter) 必要在一种模块中定义,不要传替参数到模块( 仿真测试向量例外)“`define”可以在任何地方定义,要把所有“`define”定义在一种文献中. 在编译原代码时一方面要把这个文献读入,如果但愿宏作用域仅在一种模块中,就用参数来代替。 5.1.11Comments 1. 对更新内容更新要做注释 2. 在语法块结尾做标记 //style 1 If (~OE_&& (state != PENDING)) begin .... End // if enable = = tureand ready //style 2 --- identical lableson begin and end If (~OE_&& (state != PENDING)) begin //drive data .... End //drive data // Comment end<unit>with the name of the <unit> Function Calcparity //Data,ParityErr .... Endfunction// Calcparity 3. 每一种模块都应在模块开始处做模块级注释, 参照前面原则模块头。 4. 在模块端口列表中浮现端口信号 都应做简要功能描述。 5.1.12FSM 1. VerilogHDL状态机状态分派。 VerilogHDL描述状态机时必要由parameter分派好状态,这与VHDL不同 VHDL状态机状态可以在综合时分派产生。 2. 组合逻辑和时序逻辑分开用不同进程 组合逻辑涉及状态译码和输出, 时序逻辑则是状态寄存器切换。 3. 必要涉及对所有状态都解决, 不能浮现无法解决状态, 使状态机失控。 4. Mealy机状态和输入关于,而Moore机状态转换和输入无关 Mealy 状态机例子如下: ... reg CurrentState,NextState,Out1; Parameter S0=0,S1=1; always @(posedge Clkor negedge Rst_) // state vector flip-flops (sequential) if (!Reset) CurrentState= S0; else CurrentState<= #u_dly NextState; always @(In1or In2or CurrentState) // output and state vector decode (combinational) case (CurrentState) S0:begin NextState<= #u_dly S1; Out1<= #u_dly1'b0; end S1:if (In1)begin NextState<= #u_dly S0; Out1<= #u_dly In2; end else begin NextState<= #u_dly S1; Out1<= #u_dly !In2; end endcase endmodule 5.2 代码编写中容易浮现问题 1. 在for-loop中涉及不变表达式 挥霍运算时间 for (i=0;i<4;i=i+1) begin Sig1= Sig2; DataOut[i]= DataIn[i]; end for-loop中第一条语句始终不变,挥霍运算时间. 2. 资源共享问题 条件算子中不存在资源共享 如 z = (cond)?(a + b) :(c + d); 必要使用两个加法器; 而等效条件if-then-else语句则可以资源共享 如: if (Cond) z = a + b; else z = c + d; 只要加法器输入端复用,就可以实现加法器共享,使用一种加法器实现 3. 由于组合逻辑位置不同而引起过多触发器综合 如下面两个例子 moduleCOUNT (AndBits,Clk,Rst); Output Andbits; Input Clk, Rst; Reg AndBits; //internal reg Reg [2:0] Count; always @(posedge Clk)begin begin if (Rst) Count <= #u_dly0; else Count <= #u_dlyCount + 1; End //end if AndBits <= #u_dly & Count; End//end always endmodule 在进程里变量都综合成触发器了,有4个; moduleCOUNT (AndBits,Clk,Rst); Output AndBits; Input Clk, Rst; Reg AndBits; //internal reg Reg [2:0] Count; always @(posedge Clk)begin //synchronous if (Rst) Count <= #u_dly0; else Count <= #u_dly Count + 1; End//end always always @(Count)begin //asynchronous AndBits= & Count; End//end always Endmodule//end COUNT 组合逻辑单开,只有3个触发器. 4. 谨慎使用异步逻辑 module COUNT (Z,Enable,Clk,Rst); Output [2:0] Z; Input Rst, Enable, Clk; reg[2:0] Z; always @(posedge Clk)begin if (Rst)begin Z <= #u_dly1'b0; end else if (Enable == 1'b1) begin If (Z == 3'd7) begin Z <= #u_dly1'b0; End else begin Z <= #u_dlyZ + 1'b1; end End Else ; End//end always Endmodule//end COUNT 是同步逻辑,而下例则使用了组合逻辑作时钟,以及异步复位.实际运用中要加以避免. module COUNT (Z,Enable,Clk,Rst); Output [2:0] Z; Input Rst, Enable, Clk; Reg [2:0] Z; //internal wire wire GATED_Clk= Clk& Enable; always @(posedge GATED_Clkor posedge Rst)begin if (Rst)begin Z <= #u_dly1'b0; end else begin if (Z == 3'd7) begin Z <= #u_dly1'b0; end else begin Z <= #u_dlyZ + 1'b1; end End//end if End//end always Endmodule //end module 5. 对组合逻辑描述有各种方式 ,其综合成果是等效 c = a &b; 等效于 c[3:0] = a[3:0] & b[3:0]; 等效于 c[3] = a[3] & b[3]; c[2] = a[2] & b[2]; c[1] = a[1] & b[1]; c[0] = a[0] & b[0]; 等效于 for ( i=0;i<=3;i= i+ 1) c[i]= a[i]& b[i]; 可以选取简洁写法. 6. 考虑综合执行时间 普通会推荐将模块划分得越小越好, 事实上要从实际设计目的 面积和时序规定出发 好时序规划和适当约束条件要比电路大小对综合时间影响要大, 要依照设计目的来划分模块, 对该模块综合约束scripts也可以集中在该特性上, 要选取适当约束条件, 过度约束将导致漫长综合时间 最佳在设计阶段就做好时序规划 通过综合约束scripts来满足时序规划 。这样就能获得既满足性能成果, 又使得综合时间最省, 从代码设计讲 500~5000行长度是适当。 7. 避免点到点例外 所谓点到点例外 Point-to-point exception 就是从一种寄存器输出到另一种寄存器输入途径不能在一种周期内完毕 多周期途径就是其典型状况, 多周期途径比较麻烦 在静态时序分析中要标注为例外, 这样也许会由于人为因素将其她途径错误地标注为例外, 从而对该途径没有分析 导致隐患 避免使用多周期途径 。如果的确要用, 应将它放在单独一种模块, 并且在代码中加以注释。 8. 避免伪途径(False path) 伪途径是那些静态时序分析 (STA) 以为是时序失败, 而设计者以为是对的途径。 普通会人为忽视这些warning, 但如果数量较多时, 就也许将其她真正问题错过了。 9. 避免使用Latch 使用Latch 必要有所记录, 可以用All_registers -level_sensitive 来报告设计中用到Latch。 不但愿使用Latch时, 应当对所有输入状况都对输出赋值, 或者将条件赋值语句写全, 如在if语句最后加一种else, case语句加defaults。 当你必要使用Latch时, 为了提高可测性, 需要加入测试逻辑。 不完整if和case语句导致不必要latch产生, 下面语句中, DataOut会被综合成锁存器。 如果不但愿在电路中使用锁存器, 它就是错误。 always @(Cond) begin if (Cond) DataOut<= DataIn end 10. 避免使用门控时钟 使用门控时钟(Gated clock)不利于移植, 也许引起毛刺, 带来时序问题, 同步对扫描链形成带来问题。 门控钟在低功耗设计中要用到, 但普通不要在模块级代码中使用。 可以借助于Power compiler来生成, 或者在顶层产生。 11. 避免使用内部产生时钟 在设计中最佳使用同步设。 如果要使用内部时钟, 可以考虑使用各种时钟。 由于使用内部时钟电路要加到扫描链中比较麻烦 ,减少了可测性, 也不利于使用约束条件来综合。 12. 避免使用内部复位信号 模块中所有寄存器最佳同步复。 如果要使用内部复位, 最佳将其有关逻辑放在单独模块中, 这样可以提高可阅读性。 13. 如果的确要使用内部时钟, 门控时钟, 或内部复位信号 将它们放在顶层将这些信号产生放在顶层一种独立模块 这样所有子模块分别使用单一时钟和复位信号 普通状况下内部门控时钟可以用同步置数代替 例如: module COUNT (Reset Enable Clk Qout) module COUNT (Reset Enable Clk Qout) input Reset Enable Clk input Reset Enable Clk output [2:0] Qout output [2:0] Qout reg[2:0] Qout reg[2:0] Qout wire GATED_Clk= Clk& Enable always @(posedge Clk)begin if (Reset) begin always @(posedge GATED_Clkor posedgeReset) Qout= 1'b0 begin end if (Reset) begin else if (Enable == 1'b1) begin Qout= 1'b0 if (Qout== 3'd7) begin end Qout= 1'b0 else begin end if (Qout== 3'd7) begin else begin Qout=1'b0 Qout= Qout+ 1'b1 end end else begin end Qout= Qout+ 1'b1 end end endmodule end end endmodule 6 附录 6.1 Module 编写示例 /* *\ Filename ﹕ Author ﹕ Description ﹕ Called by ﹕ Revision History ﹕mm/dd/yy Revision 1.0 Email ﹕ Company ﹕ HuaweiTechnology .Inc Copyright(c)1999,HuaweiTechnology Inc,All right reserved \* */ Module module_name( Output_ports,//comment ;port description Input_ports,//comment ;port description Io_ports,//comment ;port descripttion Clk_port,//comment ;port description Rst_port//comment ;port description ); //port declarations Output [31:;0] Dataout; Input [31:0] Datain; Inout Bi_dir_signal; Input input1, Input2; //interrnal wire/regdeclarations Wire [31:0] internal_data; Reg output_enable; //module instantiations,Self-build module Module_name1 Uinstance_name1(...); Module_name2 Uinstance_name2(...); // TSC4000cell DTC12V1 (.Clk(Clk),.CLRZ(Clr),.D(Data),.Q(Qout)); //continuous assignment Assign Data_out= out_enable? Internal_data: 32’hz; //always block Always @(input2) Begin ... End //function and task definitions Functiom [function_type] function_name; Declarations_of_inputs; [declarations_of_local_variables]; Begin Behavirol_statement; Function_name= function_express; End Endfunction//end function_name Endmodule//end module_name 6.2 testbench编写示例 下面是一种格雷码测试模块, module TB_GRAY; reg Clock; reg Reset; wire [7:0] Qout; integer fout;//输出文献指针 parameter CYC= 20; GRAY DUT(.Clock(Clock),.Reset(Reset),.Qout(Qout)); initial begin Clock = 1'b0; Reset =1'b1; #(5*CYC)Reset = 1'b0; #(5*CYC)Reset = 1'b1; #(5000*CYC) $fclose(fout); $finish; end initial begin $shm_open("GRAY.shm"); $shm_probe("AS"); fout=$fopen("gray.dat"); end always #CYCClock = ~ Clock; //输出数据到文献gray.dat always @(posedgeClock) begin $fwrite(fout,"%d %b\n",Qout,Qout); end endmodule a 。在testbench 中避免使用绝对时间,如#20,#15 或#(CYC+15) 等,应当在文献前面使用parameter定义某些常量,使得时间定义象#(CYC+OFF0)形式,便于修改; b 。观测成果可以输出到波形文献GRAY.shm 或数据文献gray.dat 生成波形文献可以用simwave观测成果 比较直观 而生成数据文献则既可以迅速定位 也可以通过编写小程序工具对它进行进一步解决; c 。对大设计顶层仿真 普通不要对所有信号跟踪 波形文献会很大 仿真时间延长可以有选取观测某些信号。展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




VERILOG语言编写标准规范.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/2762308.html