VerilogHDL常用建模方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
module my_and(a,b,y); //用两个nand门 input a,b; output y; wire nandab; nand(nandab,a,b),
(y,nandab,nandab); endmodule module my_or(a,b,y); //用三个nand门 input a,b; output y; wire nandaa,nandbb; nand(nandaa,a,a),
3.1 建模方法引例
【例3-1】 设计实现一个3人判决 电路,当3个人中有2人或者超 过2个人同意,则表决结果为通 过;否则表决结果不通过。
3.1 建模方法引例
❖ 第一步:理解题意
✓ 设a,b,c分别代表3个人, 同意用1表示,不同意用0 表示,y代表表决结果,1 表示通过,0表示不通过。
✓ 根据题意有,当a,b,c 三个中有2个为1,或者3 个均为1时,y为1,否则y 为0。
(nandbb,b,b), (y,nandaa,nandbb); endmodule
module my_not(a,y); //用一个nand门 input a; output y; nand(y,a,a); endmodule module my_xor(a,b,y); //用四个nand门实现异或门 input a,b; output y; wire andab,c,d; nand(andab,a,b),
module decision_2(a,b,c,y);
input a,b,c;
output reg y;
always @(a,b,c)
Decoder0
case({a,b,c})
a
b
3'b000: y=0; c
IN[2..0] OUT[7..0]
WideOr0 y
3'b001: y=0;
DECODER
❖ 第二步:根据题意,列真 值表
abcy 0000 0010 0100 0111 1000 1011 1101
1111
3.1 建模方法引例
第三步:根据真值表,列输出方程: ✓ y = a'bc + ab'c + abc' + abc
第四步:化简方程,可 以采用代数化简法或者 卡诺图化简法
✓ 化简后的方程为:
1 1 ? : 1; 1 ? 1 : 1; ? 1 1 : 1; 0 0 ? : 0; 0 ? 0 : 0; ? 0 0 : 0; endtable endprimitive
//全加器求和实现部分 primitive U_ADD_S(S, A, B,CI);
output S; input A, B, CI; table // A B CI : S
(c,andab,a), (d,andab,b), (y,c,d); endmodule
用户自定义原语
【例3-8】 表示组合逻辑的 UDP举例:一位全加器
// 全加器进位实现部分 primitive U_ADD_C (CO, A, B, CI);
output CO; input A, B, CI; table // A B CI : CO
3'b010: y=0;
3'b011: y=1;
3'b100: y=0;
3'b101: y=1;
3'b110: y=1;
3'b111: y=1;
endcase
endmodule
3.1 建模方法引例
【例3-4】 对应于步骤三的Verilog建模 module decision_3(a,b,c,y); input a,b,c; output y; assign y=(~a&b&c)|(a&~b&c)|(a&b&~c)|(a&b&c); endmodule
y = ab + bc+ca
y bc
a 00 01 11 10 00 0 1 0
10 1 1 1
3.1 建模方法引例
第五步:根据化简后的方程画出电路图
ab a
b
bc
Βιβλιοθήκη Baidu
WideOr0
c
y
ca
3.1 建模方法引例
【例3-2】 对应于步骤一的Verilog建模
module decision_1(a,b,c,y);
3.1 建模方法引例
图3-6 功能仿真波形
3.2 结构化形式建模
❖ 1. 门级建模 ❖ 2. 用户自定义原语
门级建模
❖ (1)与/或门类 ❖ (2)缓冲/非门类
门级建模
【例3-7】 利用双输入端的nand门,编写 自己与门(my_and)、或门(my_or)、非 门(my_not)、异或门(my_xor)。
a
input a, b,ci;
input a,b,c;
output reg y;
always @(a,b,c)
if((a&b==1)|(b&c==1)|(c&a==1)|(a&b&c==1)) y=1;
else y=0; endmodule
y~8
y~9
c
y~1
a
y
b
y~5
y~3
y~7
3.1 建模方法引例
【例3-3】 对应于步骤二的Verilog建模
always 0~4
always 0~5
b
always 0~6
a
y
always 0~2 c
always 0~0
3.1 建模方法引例
【例3-5】 对应于步骤四的Verilog建模 module decision_4(a,b,c,y); input a,b,c; output y; assign y=(a&b)|(b&c)|(c&a); endmodule
0 0 0 : 0; 0 0 1 : 1; 0 1 0 : 1; 0 1 1 : 0; 1 0 0 : 1; 1 0 1 : 0; 1 1 0 : 0; 1 1 1 : 1; endtable endprimitive
用户自定义原语
//调用上述两个UDP的全加器模块
module U_ADD(SUM,CO,a, b,ci);
3.1 建模方法引例
【例3-6】 对应于步骤五的Verilog建模 module decision_5(a,b,c,y); input a,b,c; output y; //assign y=(a&b)+(b&c)+(c&a); //assign y=a&b+b&c; and (ab,a,b),
(bc,b,c), (ca,c,a); or (y,ab,bc,ca); endmodule
相关文档
最新文档