Verilog HDL中的逻辑设计方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

The success's road
红色飓风FPGA普及行动
第四讲:Verilog HDL语言组合逻辑设计方法以及 QuartusII软件的一些高级技巧


远见品质
联系方式
主讲:姚老师 Email: yaoyuan@ 相关网站: /

远见品质
可综合风格的Verilog建模类型
可综合建模类型只有两种: 1) 组合逻辑:
任何时候,如果输出信号直接由当前的 输入信号的组合决定,则此逻辑为组合 逻辑。
2) 时序逻辑: 如果逻辑中具有记忆功能,则此逻辑为 时序逻辑。在任何给定的时刻,如果输 出不能完全由输入信号确定,则此逻辑 具有记忆功能。

远见品质
两个最常用的语句
If语句 Case语句

远见品质 module compif(a, b, c, d, e); input a, b, c, d; output e; reg e; always @(a or b or c or d) if(a&b) e=d; else if (a&~b) e=~c; else if (~ a&b) e=1’b0; else if (~a&~b) e=1’b1; endmodule
条件语句-If

远见品质
不完整条件语句
module incpif(a, b, c, d, e); input a, b, c, d; output e; reg e; always @(a or b or c or d) if (a&b) e=d; else if(a&~b) e=~c; endmodule 在上面所述的例子中,当 a 为 0 时,没有值赋给 e。因此,e 将保存原来的值,直到 a 变为 1。此行为与锁存器的特性 相同

远见品质
带有缺省项的完整条件语句
module compif(a, b, c, d, e); input a, b, c, d; output e; reg e; always @(a or b or c or d) if (a&b) e=d; else if (a&~b) e=~c; else e=‘bx; Endmodule 在上面的例子中,虽然没有定义所有可能的选择,但为没有 定义的选择定义了缺省的行为。因此,它们都是纯的组合 逻辑,并没有产生额外的锁存器。

远见品质 完整条件语句 module comcase(a, b, c, d, e); input a, b, c, d; output e; reg e; always @(a or b or c or d) case ({a,b}) 2’b11: e=d; 2’b10: e=~c; 2’b01: e=1’b0; 2’b00: e=1’b1; endcase endmodule
条件语句-Case

远见品质
不完整条件语句
module inccase(a, b, c, d, e); input a, b, c, d; output e; reg e; always @(a or b or c ord) case ({a,b}) 2’b11: e=d; 2’b10: e=~c; endcase endmodule

远见品质
带有缺省项的完整条件语句
module comcase(a, b, c, d, e); input a, b, c, d; output e; reg e; always @(a or b or c or d) case ({a,b}) 2’b11: e=d; 2’b10: e=~c; default: e=‘bx; endmodule

远见品质
带有指令的完整 case 语句
module dircase(a, b, c, d) input b, c; input [1:0] a; output d; reg d; always @(a or b or c) case (a) //ambit synthesis case = full 2’b00: d=b; 在此例中,虽然没有定义所有可能 2’b01: d=c; 的选择,但其中的指令通知优化器没 endcase 有定义的选择将不会发生。此例为纯 endmodule 组合逻辑,不会产生锁存器。

远见品质
组合逻辑设计要点1
组合逻辑的两种Verilog HDL表 示: -用 assign 语句:
assign q = (al==1?) d : 0 ;
-用 always 块:
always @(al or d) begin if (al==1) q <= d ; else q <= 0; end

远见品质
组合逻辑设计要点2
组合逻辑的两种Verilog HDL表示:
-用always块时,没注意加else语句: 如: always @(al or d) begin if (al==1) q <= d ; end 则: 此时生成的不是纯组合逻辑,因 为当 al==0时,q能保留原来的值,所以 生成的电路中有锁存器。

远见品质
组合逻辑设计要点3
用always块时,必须注意电平敏感的信 号表是否完全,如: always @ (a or b or or c or d ) begin out = (a & b & c) | (d & e); end
此时生成的不是纯组合逻辑,因为当 e 变化时,out 能立即跟着变化。只有当a 或 b 或 c 或 d 变化时e 变化后果才显示出来。可见需要有一个寄存器来储存 的变化。 不 的 e

远见品质
怎样使用双向口
[注意]:
声明一个inout口,可以用来输入或输出数据。inout口默 认为网络连接类型。不允许在过程块(initial 或always 块)中对网络连接类型的数据进行过程赋值;但可以在过 程块外把一个寄存器数据类型通过连续赋值语句赋给它 (inout口),或者把它与用户定义的源语(UDP)相连。 必须为inout口设计控制逻辑,用来保证正确的操作。当把 inout口作为输入口时,必须通过控制逻辑禁止输出到 inout口。

相关文档
最新文档