Quartus
使用–全加器
原理图方式(而输入或门)
然后完成一个2选1的原理图
然后点击new选择University Program VWF
将其全部移入
选择器件然后点击设置时间。
用verilog进行电路设计
右击选择Insert Template
!!Verilog HDL要求module描述的实例名称必须与储存文件名一致,我们将程序性稍做修改
// 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
-
Verilog HDL程序是以module为基本单位的,形式上以 m o d u l e < n a m e > module<name> module<name>开头,以 e n d m o d u l e endmodule endmodule结尾,模块名称 n a m e name name可以由设计者自定,并要求和文件存储名称一致。
-
m o d u l e < n a m e > module<name> module<name>和 e n d m o d u l e endmodule endmodule之间成为
模块实体
,其包括输入输出端口及数据类型描述,接下来是实际语句体描述。输入输出端口数据名称和类型的描述,要放在模块名称后面,并且用括号括起来。 -
输入/输出/双向端口变量描述一般以如下形式,不同端口之间要用逗号
,
隔开//input 变量宽度 变量名称 input signed [WIDTH-1:0] dataa, //output 变量宽度 变量名称 output reg [WIDTH:0] result //bidir 变量宽度 变量名称
-
Verilog HDL中主要有两种类型
导线型
w i r e wire wire和寄存器型
r e g reg reg。在端口变量描述中 w i r e wire wire可以省略。各种类型容纳变量都是容纳的二进制数,他们能够纳二进制数的位数称之为
线宽
//例如[7:0],表示有8位宽度的向量,内部的二进制数或存放二进制数的位置编号是7,6,5,4,3,2,1,0
-
形参要用parameter保留字来定义,形式为: p a r a m e t e r 形参名称 = 常数 parameter 形参名称 = 常数 parameter形参名称=常数,大多数情况下形参都用大写字母来表示
-
l w a y s @ ( p o s e d g e c l k ) lways @ (posedge clk) lways@(posedgeclk)是一个结构体语句的头,有多个语句时要用 b e g i n . . . e n d begin ... end begin...end语句括起来,其代表只要clk上升沿到来,该 b e g i n . . . e n d begin ... end begin...end语句体的内容就会被执行一遍。always语句括号内的变量成为敏感变量,多个敏感变量同时存在,用
or
或者,
分开。 p o s e d g e posedge posedge和 n e g e d g e negedge negedge必须在每个敏感变量之前修饰,如果下降沿有效则用 n e g e d g e negedge negedge修饰。 -
a l w a y s always always中的语句都是按顺序执行的。
-
这个Add_Sub程序中设计了一个16位的加减法运算器,输入输出端口有两个16位的数据导线 d a t a a dataa dataa和 d a t a b datab datab一个时钟输入导线 c l k clk clk,一个控制选择加减法运算的导线Sub,输出端口是一个16位的寄存器 r e s u l t result result。每当时钟上升沿到来的时刻,依据Sub为0还是1进行加法或者减法运算,并且将结果送到 r e s u l t result result寄存器。