数字逻辑——逻辑运算和算术运算

一、 实验目的

用if-else语句或case语句实现对两个四位向量A,B的l逻辑运算和算术运算。通过实验熟悉实现数据逻辑运算、算术运算的方法。
① 当M=0时对A,B进行逻辑运算:对A取反,A和B的按位与运算,A和B的按位或运算,A与B的异或运算。
② 当M=1时,对A,B进行算数运算:A+B+Cin或A-B-Cin

二、 实验内容

1. 实验流程

① 分析实验需要实现的功能:在控制信号控制下完成对A,B的逻辑运算和算术运算。本实验的关键在于理清逻辑顺序,用verilog语言将在不同条件实现不同运算表达出来。
② 实验中M用于区分A,B进行逻辑运算或算术运算。
③ 逻辑运算又分为四种运算,可以用一个2-4译码器来实现,这里需要一个2位向量。
④ 算术运算分为两种运算,也可以用逻辑运算中的2位向量控制,增加default表示无效输出。
⑤ 算数运算中可能产生进位,输出中除四位输出结果,还需增加一位进位输出。
⑥ 根据上诉理论分析写出verilog代码,并上板验证功能。

2. Verilog代码分析

(1) Design source(.v文件):

 module lab4(
    input [3:0]A,
    input [3:0]B,
    input [1:0]S,
    input M,
    input Cin,
    output reg Cout,
    output reg [3:0] F
    );
    always@(*)
    begin
     if(M==0)
       begin
          case(S)
          2'b00: F=~A;
          2'b01: F=A&B;
          2'b10: F=A|B;
          2'b11: F=A^B;
          endcase
          Cout=0;
       end
     else
       begin
          case(S)
          2'b00: {Cout,F}=A+B+Cin;
          2'b01: {Cout,F}=A-B-Cin;
          default: {Cout,F}=5'b11111;//输出无效,全亮
          endcase
       end
    end
endmodule

.v分析:
① input两个四位向量A,B作为运算输入的两个对象
② input两位向量控制信号S,用于在逻辑运算和算术运算中选择具体运算种类
③ input 信号M用于选择逻辑运算类或算术运算类
④ input 数Cin,参与A,B的算术运算
⑤ output 一个4位向量作为逻辑运算的结果或算术运算的部分结果
⑥ output 一个进位Count,作为算术运算的进位
⑦ 在always语句中,通过if-else语句对M的值进行判断,当M为0时进入逻辑运算类,M不为0时进入算术运算类。
⑧ 在逻辑运算类和算术运算类中,分别用case语句,根据S的值进行对应运算,其中算术运算中用拼接符将进位信号和本位输出进行串行进位赋值。

(2) Constraints source(.xdc文件)

##switches
set_property PACKAGE_PIN J15 [get_ports A[0]]
set_property IOSTANDARD LVCMOS33 [get_ports A[0]]
set_property PACKAGE_PIN L16 [get_ports A[1]]
set_property IOSTANDARD LVCMOS33 [get_ports A[1]]
set_property PACKAGE_PIN M13 [get_ports A[2]]
set_property IOSTANDARD LVCMOS33 [get_ports A[2]]
set_property PACKAGE_PIN R15 [get_ports A[3]]
set_property IOSTANDARD LVCMOS33 [get_ports A[3]]
set_property PACKAGE_PIN R17 [get_ports B[0]]
set_property IOSTANDARD LVCMOS33 [get_ports B[0]]
set_property PACKAGE_PIN T18 [get_ports B[1]]
set_property IOSTANDARD LVCMOS33 [get_ports B[1]]
set_property PACKAGE_PIN U18 [get_ports B[2]]
set_property IOSTANDARD LVCMOS33 [get_ports B[2]]
set_property PACKAGE_PIN R13 [get_ports B[3]]
set_property IOSTANDARD LVCMOS33 [get_ports B[3]]
set_property PACKAGE_PIN T8 [get_ports Cin]
set_property IOSTANDARD LVCMOS33 [get_ports Cin]
set_property PACKAGE_PIN U8 [get_ports M]
set_property IOSTANDARD LVCMOS33 [get_ports M]
set_property PACKAGE_PIN R16 [get_ports S[0]]
set_property IOSTANDARD LVCMOS33 [get_ports S[0]]
set_property PACKAGE_PIN T13 [get_ports S[1]]
set_property IOSTANDARD LVCMOS33 [get_ports S[1]]
##led
set_property PACKAGE_PIN H17 [get_ports F[0]]
set_property IOSTANDARD LVCMOS33 [get_ports F[0]]
set_property PACKAGE_PIN K15 [get_ports F[1]]
set_property IOSTANDARD LVCMOS33 [get_ports F[1]]
set_property PACKAGE_PIN J13 [get_ports F[2]]
set_property IOSTANDARD LVCMOS33 [get_ports F[2]]
set_property PACKAGE_PIN N14 [get_ports F[3]]
set_property IOSTANDARD LVCMOS33 [get_ports F[3]]
set_property PACKAGE_PIN R18 [get_ports Cout]
set_property IOSTANDARD LVCMOS33 [get_ports Cout]

.xdc分析:
① “#”代表被注释的引脚。
② 每个引脚两行语句:第一行代表引脚在实验板上的位置;第二行代表输入输出标准电平3.3V
③ 引脚锁定文件使用到的引脚名称与design source中所使用到变量名称相对应
④ 本次实验中用到12个输入端口,其中9位端口用于输入参与运算的数据,3位端口用于输入决定具体运算类型的控制向量

(3) Elaborated design:

在这里插入图片描述

三、 实验结论

通过本次实验,我掌握了通过控制信号进行多种不同运算操作的方法。在逻辑运算中,根据逻辑运算的具体种类数目,可以译码器原理决定控制信号位数。本次实验中为了减少端口的使用,算术运算没有另增一个控制信号而是利用逻辑运算中的S信号,通过M进行区别。整个实验中,M与S相结合,实现了对运算操作种类的选择

四、思考与讨论

(一)实验感想:

本次实验让我利用了对verilog语言中的if-else语法和case语法有了更加熟练的运用,同时通过verilog理清了具备多种功能电路的逻辑思路。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

adriaW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值