当前位置:   article > 正文

EDA学习记录(二)组合电路的Verilog设计_eda verliog 设计半加器实验 管脚

eda verliog 设计半加器实验 管脚

目录

前言:

一,半加器电路

1,原理(待补充)

2,verilog语言

(1)模块语句

(2)端口语句,端口信号,端口模式

(3)逻辑操作符

(4)连续赋值语句


前言:

一,半加器电路

1,原理(待补充)

半加器的逻辑表达式

半加器的电路结构,半加器的真值表,半加器电路的时序表达

2,verilog语言

  1. module h_adder (A,B,SO,CO);
  2. input A,B; //input 模块外部端口描述语句,输入
  3. output SO,CO; //output 同理,输出
  4. assign SO = A^B; //assign 用于描述逻辑功能和电路结构
  5. assign CO = A&B;
  6. endmodule

(1)模块语句

  1. module 模块名 (模块端口名表);
  2. 模块端口和模块功能描述
  3. endmodule

(2)端口语句,端口信号,端口模式

  1. input 端口名1,端口名2......; //输入端口
  2. output 端口名1,端口名2......; //输出端口
  3. inout 端口名1,端口名2......; //双向端口,如RAM的数据口,单片机的I/O口
  4. input[msb:lsb] 端口名1,端口名2......; //多信号端口或总线端口

msb:lsb  信号矢量的最高位和最低位

eg. output[0:3] C,D;     

表示的是C[3:0],D[3:0]

C[3:0]表示:C[3],C[2],C[1],C[0]

(3)逻辑操作符&,^

逻辑与 &

逻辑异或 ^

(4)连续赋值语句

  1. assign 目标变量名=驱动表达式;
  2. assign [延时] 目标变量名=驱动表达式;
  3. `timescale 10ns/100ps; //仿真的基本时间是10ns,仿真时间的精度是100ps
  4. assign #6 R1 = A & B; //6个时间单元才执行运算赋值,即60ns

注意!timescale前的符号为反单引号 ( ` ),不是单引号 ( ' )

二,多路选择器

1,4选1多路选择器 case语句

(0)代码部分

  1. module MUX41a (a,b,c,d,s1,s0,y);
  2. input a,b,c,d;
  3. input s1,s0;
  4. output y;
  5. reg y;
  6. always@(a or b or c or d or s1 or s0)
  7. begin : MUX41
  8. case ({s1,s0})
  9. 2'b00:y=a;
  10. 2'b01:y=b;
  11. 2'b10:y=c;
  12. 2'b11:y=d;
  13. default :y=a;
  14. endcase
  15. end
  16. endmodule

代码解释

(1)reg型变量

reg用于定义特定类型的的变量,即寄存器型变量或称寄存器型数据类型的变量

  1. reg 变量名1,变量名2,......;
  2. reg[msb:lsb] 变量名1,变量名2,......;

(2)过程语句

  1. always@(敏感信号及敏感信号列表或表达式)
  2. 包括块语句的各类顺序语句

(3)块语句 begin_end

  1. begin [:块名]
  2. 语句1;语句2;...语句n;
  3. end

(4)case语句

  1. case(表达式)
  2. 取值1:begin 语句1;语句2;...语句n; end
  3. 取值2:begin 语句n+1;语句n=2;...语句n+m; end
  4. ...
  5. default : begin 语句n+m+1;...; end
  6. endcase

(5)Verilog de 四种逻辑状态

  1. 0。含义有四个,即二进制数0、低电平、逻辑0、事件为伪的判断结果。
  2. 1。含义也有四个,即二进制数1、高电平、逻辑1、事件为真的判断结果。
  3. z或Z。高阻态,或高阻值。
  4. x或X。不确定,或未知的逻辑状态。x与z大小写都不分。.

(6)并位操作运算符{ }

(7)Verilog的数字表达形式  2'b00

<位宽>'<进制><数字>

B二进制

O八进制

H十六进制

D十进制

(8)仿真结果

2,.......assign语句表达方式

(1)代码部分

  1. module MUX41a (a,b,c,d,s1,s0,y);
  2. input a,b,c,d,s1,s0;
  3. output y;
  4. wire [1:0] SEL;
  5. wire AT,BT,CT,DT;
  6. assign SEL = {s1,s0};
  7. assign AT = (SEL==2'D0);
  8. assign BT = (SEL==2'D1);
  9. assign CT = (SEL==2'D2);
  10. assign DT = (SEL==2'D3);
  11. assign y =(a&AT)|(b&BT)|(c&CT)|(d&DT);
  12. endmodule

(2)按位逻辑操作符

(3)等式操作符 ==

(4)wire定义网线型变量

  1. wire 变量名1,变量名2..;
  2. wire[msb:lsb] 变量名1,变量名2..;

wire与assign的赋值性质一致,

  1. wire Y= a1^a2;
  2. 可以取代
  3. wire a1,a2;
  4. assgin Y= a1^a2;

3,....条件赋值语句表述方式

(1)代码

  1. module MUX41a (A,B,C,D,S1,S0,Y);
  2. input A,B,C,D,S1,S0;
  3. output Y;
  4. wire AT = S0?D:C;
  5. wire BT = S0?B:A;
  6. wire Y =(S1?AT:BT);
  7. endmodule

(2)条件表达式  ?

条件表达式 ? 表达式1 : 表达式2

wire AT = S0?D:C;     //如果S0=1成立,则AT=D;如果S0=0,则AT=C

5,..... 条件语句表达式方式

(1)代码

  1. module MUX41a (A,B,C,D,S1,S0,Y);
  2. input A,B,C,D,S1,S0;
  3. output Y;
  4. reg[1:0]SEL;
  5. reg Y;
  6. always @ (A,B,C,D,SEL)
  7. begin
  8. SEL = {S1,S0};
  9. if (SEL==0) Y=A;
  10. else if (SEL==1) Y=B;
  11. else if (SEL==2) Y=C;
  12. else Y=D;
  13. end
  14. endmodule

(2)if条件语句

(3)过程赋值语句

(4)数据类型表达方式

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/805200
推荐阅读
相关标签
  

闽ICP备14008679号