Quartus

使用—全加器

原理图方式(而输入或门)

image-20230807180738812

image-20230807181223960

image-20230807181408224

然后完成一个2选1的原理图

image-20230807181746258

然后点击new选择University Program VWF

image-20230807181829430

image-20230807181944693

image-20230807182059221

将其全部移入

image-20230807182228594

选择器件然后点击设置时间。

image-20230807182426708

用verilog进行电路设计

image-20230807183308472

右击选择Insert Template

image-20230807183728558

!!Verilog HDL要求module描述的实例名称必须与储存文件名一致,我们将程序性稍做修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
	// Quartus II Verilog Template
// Signed adder/subtractor

module adder_sub
#(parameter WIDTH=16)
(
input signed [WIDTH-1:0] dataa,
input signed [WIDTH-1:0] datab,
input add_sub, // if this is 1, add; else subtract
input clk,
output reg [WIDTH:0] result
);

always @ (posedge clk)
begin
if (add_sub)
result <= dataa + datab;
else
result <= dataa - datab;
end

endmodule

  1. Verilog HDL程序是以module为基本单位的,形式上以$module$开头,以$endmodule$结尾,模块名称$name$可以由设计者自定,并要求和文件存储名称一致。

  2. $module$和$endmodule$之间成为模块实体,其包括输入输出端口及数据类型描述,接下来是实际语句体描述。输入输出端口数据名称和类型的描述,要放在模块名称后面,并且用括号括起来。

  3. 输入/输出/双向端口变量描述一般以如下形式,不同端口之间要用逗号隔开

    1
    2
    3
    4
    5
    //input 变量宽度 变量名称
    input signed [WIDTH-1:0] dataa,
    //output 变量宽度 变量名称
    output reg [WIDTH:0] result
    //bidir 变量宽度 变量名称
  4. Verilog HDL中主要有两种类型导线型$wire$和寄存器型$reg$。在端口变量描述中$wire$可以省略。

    各种类型容纳变量都是容纳的二进制数,他们能够纳二进制数的位数称之为线宽

    1
    //例如[7:0],表示有8位宽度的向量,内部的二进制数或存放二进制数的位置编号是7,6,5,4,3,2,1,0
  5. 形参要用parameter保留字来定义,形式为:$parameter 形参名称 = 常数$,大多数情况下形参都用大写字母来表示

  6. $lways @ (posedge clk)$是一个结构体语句的头,有多个语句时要用$begin … end$语句括起来,其代表只要clk上升沿到来,该$begin … end$语句体的内容就会被执行一遍。always语句括号内的变量成为敏感变量,多个敏感变量同时存在,用or或者分开。$posedge$和$negedge$必须在每个敏感变量之前修饰,如果下降沿有效则用$negedge$修饰。

  7. $always$中的语句都是按顺序执行的。

  8. 这个Add_Sub程序中设计了一个16位的加减法运算器,输入输出端口有两个16位的数据导线$dataa$和$datab$一个时钟输入导线$clk$,一个控制选择加减法运算的导线Sub,输出端口是一个16位的寄存器$result$。每当时钟上升沿到来的时刻,依据Sub为0还是1进行加法或者减法运算,并且将结果送到$result$寄存器。

 

image-20230807220923070