以后所有和FPGA相关的开发环境都为Vivado
目录
练习一.简单的组合逻辑设计
这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign结构。注意equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。
// compare.v
`timescale 1ns / 1ns
/*
1. `timescale 1ns / 1ps,含义为:时延单位为1ns,时延精度为1ps。
2. 在编译过程中,`timescale会影响其后面所有模块中的时延值,直至遇到另一个`timescale指令或`resetall指令。
3. 当一个设计中的多个模块带有自身的`timescale编译指令时,模拟器将定位在所有模块的最小时延精度上,并且所有时延都相应地换算为最小时延精度。
*/
module compare(a,b,equal);
input a,b;
output equal;
assign equal=(a==b)?1:0;
endmodule
// simu_compare.v
`timescale 1ns / 1ns
module simu_compare;
reg a,b;
wire equal;
initial
begin
a=0;
b=0;
#100 a=0;b=1;
#100 a=1;b=1;
#100 a=1;b=0;
#100 $stop;
end
compare u1(.equal(equal),.a(a),.b(b));
endmodule
练习二. 简单时序逻辑电路的设计
在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。在可综合的Verilog HDL模型,我们通常使用always块和 @(posedge clk)或 @(negedge clk)的结构来表述时序逻辑。下面是一个1/2分频器的可综合模型。
//half_clk.v
`timescale 1ns / 1ps
module half_clk(reset,clk_in,clk_out);
inp