13.阻塞赋值和非阻塞赋值的特点、区别及使用方法。
非阻塞(non—blocking)赋值方式 ( b<= a):b 的值被赋成新值 a 的操作, 并不是立刻完成的,而是在块结束时才完成;块内的多条赋值语句在块结束时同时赋值;硬件有对应的电路.
阻塞(blocking)赋值方式 ( b = a):b的值立刻被赋成新值 a;完成该赋值语句后才能执行下一句的操作;硬件没有对应的电路,因而综合结果未知.阻塞赋值是在该语句结束是立即完成赋值操作;非阻塞赋值是在整个过程块结束是才完成赋值操作。
阻塞赋值:
1.只有在当前阻塞赋值语句执行完毕后才会执行下一条同类语句。
2.在执行完当前赋值语句后,目标变量的值立即发生改变。
3.阻塞”的含义是指在当前的赋值操作完成前,阻塞(或停止)其他语句的执行。
4.执行完所有阻塞赋值语句后,过程块才能结束。
非阻塞赋值:
1.在当前非阻塞赋值语句执行完毕之前就会执行下一条同类语句。
2.“非阻塞”的含义是指在当前的赋值操作完成前,不会阻塞其他语句的执行。
3.在过程块结束时刻,同时执行所有非阻塞赋值语句的赋值操作。
使用方法:
1.当模型触发器(Fip-fop) 时,使用非阻塞赋值。
2.当模型锁存器(Latch)时,使用非阻塞赋值。
3.当模型组合逻辑(使用always块)时,使用阻塞赋值。
4.当在同个always块中,如果既模型时序逻辑,又模型组合逻辑,那么使用非阻塞赋值。
4. 软核、固核、硬核的概念。
软核:功能经过验证的、可综合的、实现后电路结构总门数在5000门以上的Verilog HDL模型。由软核构成的器件称为虚拟器件。三者中灵活性最高。软核在EDA设计领域指的是综合之前的寄存器传输级(RTL)模型
固核:指在某一种现场可编程门阵列(FPGA)器件上实现的、经验证是正确的、总门数在5000门以上电路结构编码文件.固核在EDA设计领域指的是带有平面规划信息的网表.
硬核:指在某一种专用集成电路(ASIC)工艺的器件上实现的、经验证是正确的、总门数在5000门以上的电路结构版图掩膜。
inleshe什么是always。
always 语句是循环语句,initial 只执行一次.它们不能嵌套。
intial 只能用在仿真中,只在 0 时刻开始执行一次
always 可以用在仿真中也可以用在综合中,只要触发条件满足,就会重复执行其中的语句
功能定义部分
Verilog 的端口模式有三种:输入端口、输出端口、双向端口,对应的端口定义关键词
分别是:input、output、inout
顺序块儿和并行块儿
initial语句在仿真过程中只执行一次。
一个module中可以有多个initial过程块,它们是并行运行的。
Initial过程块常用于测试文件和虚拟模块的编写,用来产生仿真激励信号和记录仿真结果。
2.always语句的执行特点。使用always语句设计组合逻辑和时序逻辑电路需注意的
问题。(敏感信号、赋值类型)。
特点:1.always语句则是不断地重复活动着,直到仿真过程结束。 仿真器监控始终<时序控制>部分的触发条件是否满足,如满足则执行always过程块语句一次;如不满足,则不执行。
2.一个模块中可以有多个always块,它们都是并行运行的。
1.EDA:电子设计自动化
HDL:硬件描述语言
FPGA:现场可编程门阵列
CPLD:复杂可编程逻辑器件
2.常用的可编程器件的种类包括FPGA和CPLD
3. CPLD 器件的逻辑功能是通过与或功能(/乘积项)结构实现的
FPGA器件的逻辑功能是通过查找表结构实现的。
第2章
1. Verilog HDL模块包括几种?
包括电路模块和测试模块
2.根据抽象层次不同, Verilog电路模型可以分为两大类行为级和描述级 , 5个级别系统级、算法级、RTL级、门级、晶体管级、
3. Verilog 测试模块主要包括几部分内容?
被测电路模块
与被测模块连接的激励信号和响应信号
给激励信号赋值
将响应信号的值显示出来
4.与被测模块 input端口相连的激励信号的数据类型可以是reg类型。 与被测模块inout端
口相连的激励信号的数据类型可以是reg类型。与 被测模块output端口相连的激励信号
的数据类型可以是wire类型
5. 综合的概念是什么?(重点)
Verilog模块(程序)通过计算机上运行的综合软件工具(属EDA软件)把行为描述通过逻辑表达式的中间形式自动转换为结构描述的模块,这个过程叫做综合(Synthesis)。
第3章、第4章
1.使用 Verilog HDL设计电路模块,应包含几部分内容
端口定义、端口I/O属性声明、内部信号定义和功能定义。
2.端口 I/O属性包括几种?
Input端口、output端口、inout端口
4.定义电路模块的功能, 常用哪几种语句?。
assign连续赋值语句、元件例化语句、always过程块语句
5.在 assign连续赋值语句中,赋值语句中被赋值的变量的数据类型必须是wire型。
6. 在always、initial等过程块中, 赋值语句中被赋值的变量的数据类型必须是reg 型。
在过程块中,对变量赋值,可以采用连续赋值和过程赋值。
7.在元件例化语句,与被调用元件端口连接的变量信号的数据类型必须是wire型。 。
9. 如何定义符号常量?。
在Verilog HDL中用parameter来定义常量,即用parameter来定义一个标识符代表一个常量,称为符号常量
10.如何定义和使用memory型变量?
memory型变量的定义:reg [n-1:0] 存储器名 [m-1:0]
例:reg [7:0] mema [255:0]; //定义了一个有256个8位单元的存储器
reg memb [7:0]; //定义了一个有8个1位单元的存储器
使用memory型变量:
1.在同一个数据类型声明语句里,可以同时定义存储器型数据和reg型数据。
2.当表示数组的某个单元时,允许使用变量来表示单元的索引.
3.但表示一个向量的一位或几位时,只允许使用常量来表示位的索引。
4.使用数组时,一次只能对一个单元进行操作,不能对数组整体操作。
第6章、第7章
1. initial 语句的执行特点。
initial语句在仿真过程中只执行一次。
一个module中可以有多个initial过程块,它们是并行运行的。
Initial过程块常用于测试文件和虚拟模块的编写,用来产生仿真激励信号和记录仿真结果。
2.always语句的执行特点。使用always语句设计组合逻辑和时序逻辑电路需注意的问题。(敏感信号、赋值类型)。
特点:1.always语句则是不断地重复活动着,直到仿真过程结束。 仿真器监控始终<时序控制>部分的触发条件是否满足,如满足则执行always过程块语句一次;如不满足,则不执行。
2.一个模块中可以有多个always块,它们都是并行运行的。
注意:
边沿触发的always块用于描述时序逻辑。
电平触发的always块用来描述组合逻辑。
触发信号可以是单个信号也可以是多个信号,当有多个信号时中间需要用关键字“or”或“,”隔开。
对于组合逻辑电路,需要将所有输入信号列入敏感列表。
为了简便,可以使用两种简化方法书写:@* 和 @(*)
除了使用符号@和敏感列表来表示,Verilog中也可以采用另外一种表示电平敏感时序控制的方法:wait。
当wait()语句中的信号为真时,执行其后的语句,否则不执行。
第9章
1.电路模块的门级结构描述方法。
①调用系统的门级关键字(多输入门、多输出门、三态门)
多输入门and(与门) nor(或非门) nand(与非门) xor(异或门) or(或门)xnor(同门)
多输出门 not(非门) buf(缓冲门)
三态门bufifl,bufif0,notifl,notif0(三态门)
第10章、第12章、第13章
- 简单的组合逻辑电路的设计方法。能用always设计简单的组合逻辑电路。
2.流水线设计方法的优点
(提高了组合逻辑的数据吞吐量和处理速度)、设计方法(①划分级别,②在每-级后面加寄存器组,③寄存器组受同步时钟控制,时钟周期要大于每一级组合逻辑的延时)
4.同步有限状态机的种类,常用的状态编码的种类和特点。
Mealy状态机、Moore状态机
.利 用 有 限 状 态 机 , 以 格 雷 码 编 译 方 式 设 计 一 个 从 输 出 信 号 序 列 中 检 测出 出 1 10 01 1 信 号 的 电 路图 , 其 方 块 图 、 状 态 图 和 状 态 表 如 图 表 示.
module melay(clk,Din,reset,Qout);
input clk,reset;
input Din;
output Qout;
reg Qout;
parameter[1:0] S0=2’b00,S1=2'b01,S2=2'b11;
reg[1:0] CS;
reg[1:0] NS;
always @(posedge clk or posedge reset)
begin
if(reset==1'b01)
CS=S0;
else CS=NS;
end
always @(CS or Din)
begin
case(CS)
S0:beign
if(Din==1'b0)
begin
NS=S0;
Qout=1'b0;
end
else
begin
NS=S1;
Qout=1’b0;
end
end
S1:begin
if(Din==1’b0)
begin
NS=S2;
Qout=1’b0;
end
else
begin
NS=S1;
Qout=1’b0;
end
end
S2:beign
if(Din==1’b0)
begin
NS=S0;
Qout=1'b0;
end
else
begin
NS=S1;
Qout=1’b0;
end
end
endcase
end
endmodule
1 1 、 设 计 一 奇 偶 校 验 位 生 成 电 路 , 输 入 八 位 总 线 信号 号 b bu us s , 输 出 及 校 验位 位 o od dd d , 偶 校 验 位
e ev ve en n. .( (6 6 分) )
module parity(even,odd,bus);
output even,odd;
input[7:0] bus; //奇同偶异
assign even=^bus;//偶校验用异或
assign odd=^~bus;//奇校验用同或
endmodule
2 2 、 设 计 一 个 带 复 位 端 且 对 输 入 时钟 钟 c cl lk k 进 行 二 分 频 模 块 , 并 画 出 仿 真 波 形. .( (9 9 分) )
设 计 要 求 : 复 位 信 号 为 同 步 、 高 电 平 有 效, , 时 钟 的 下 降 沿 触 发
module m2(out,clk,reset);
input reset,clk;
output out;
reg out;
always @(negedge clk)
begin
if(reset)
out<=0;
else
out〈=~out;
end
endmodule
3 3 、 设 计 一 带 异 步 复 位 端 、 异 步 置 数 段 ( 低 电 平 有 效 ) 的 四 位 加 法 计 数 器 , 时钟 钟 c cl lk k 上 升 沿
有 效) ) , 复 位 信号 号 c cl lr r, , 置 数 信号 号 l lo oa ad d 、 输 入 数据 据 d da at ta a 、 输出 出 q qo ou ut t. . 并 画 出 仿 真 波 形。 。 (2 20 0
分) )
module adder_4(qout,clr,clk,load,data);
output[3:0] qout;
input[3:0] data;
input load,clr,clk;
reg[3:0] qout;
always @(posedge clk or negedge load or negedge clk)
begin
if(!load)
qout〈=data;
else if(!clr)
qout〈=0;
else qout〈=qout+1;
end
endmodule
仿真波形
4. 设计 计 9 9 人 表 决 器
module voter9(pass,vote);
output pass;
input[6:0] vote;
reg[2:0] sum;
integer i;
reg pass;
always @(vote)
begin
sum=0;
for(i=0;i<=8;i=i+1) //for 语句
if(vote[i]) sum=sum+1;
case(sum)
5,6,7,8,9: pass=1;
default: pass=0;
endcase
endmodule
5. 设 计 一个 个 8 8 位 计 数 器 , 要 求 异 步 复 位 , 下 降 沿 有 效 。
module count8(out,clk rst_);
output[7:0] out;
input clk, rst_;
reg [7:0]out;
always @(posedge clk or negedge rst_)
if(!rst_)
out <= 8’h0;
else
out <= out+1;
endmodule
.
根 据 下 列 给 定 的 仿 真 输 入 输 出 波 形图 图 2 2, , 说 明 完 成 此 功 能 的 电 路 是 什 么 功 能 电 路? ? 并 写 出
对 应的 的 V Ve er ri il lo og g H HD DL L 描 述 程 序 (
4 进制加法计数器
module counter(clk,clr,q,c)
input clk,clr;
output ret[1:0] q;
output c;
always@(posedge clk or negedge clr)
begin
if(~clr) q<=2’h0;
else
begin
if(2’h3==q) q〈=2'h0;
else q<=q+2’h1;
end
end
assign c=(2’h3==q)
endmodule
7 7。 。 设 计 一 个 带 有 异 步 复 位 控 制 端 和 时 钟 使 能 控 制 端 的1 10 0 进 制 计 数 器。 。 端 口 设 定 如 下: : 输
入 端 口: :C CL LK K: : 时 钟 ,R RS ST T : 复 位 端 ,E EN N : 时 钟 使 能 端 ,L LO OA AD D : 置 位 控 制 端, , D DI IN N : 置 位 数 据
端 ; 输 出 端 口 :C CO OU UT T: : 进 位 输 出 端 ,D DO OU UT T : 计 数 输 出 端 。
module cnt10 (clk,rst,en,loat,cout,dout,data);
input clk ;
input en ;
input rst ;
input load ;
input [3:0] data ;
output [3:0] dout ;
output cout ;
reg [3:0] q1 ;
reg cout ;
assign dout = q1;
always @(posedge clk or negedge rst) begin
if (!rst) q1 <= 0;
else if (en)
begin
if (!loat) q1 <= data;
else if (q1<9) q1 <= q1+1;
else q1 <= 4'b0000;
end
end
always @(q1)
if (q1==4'h9) cout = 1’b1;
else cout = 1'b0;
endmodule