虚拟机:VMware-workstation-full-14.0.0.24051
环 境:ubuntu 18.04.1
应用工具:VCS(verilog compiled simulator,编译型代码仿真器)
一、学习内容
二、语法举例
(1)可综合
- and, or, nand等基本逻辑门
- if块和case块
- +, -, *, &, | , ^, ~等逻辑运算符
- &&, ||, ==, >, >=, <, <=, !=, !等关系运算符
- << , >>, &(按位与), |(按位或),{ }(连接运算)等位操作运算符
- =,<=,assign等赋值语句
- always块
(2)不可综合
- initial块
- forever块
- repeat, force, release, task, enable, disable一般不可综合
- 系统函数如$display等
- #延时赋值语句一般综合时会被忽略
【例 1】一个采样锁存模块
这是一个采样锁存模块,在时钟上升沿锁存输入数据din到寄存器data(四位)中,dout连到data寄存器的输出。 data对应的是带复位端的寄存器,其时钟信号为clk(上升沿有效),复位信号为rstn(低电平有效)。
module sample_ff(clk, rstn, din, dout);
input clk, rstn;
input [3:0] din;
output [3:0] dout;
reg [3:0] data;
assign dout = data;
always @(posedge clk or negedge rstn) begin
if(!rstn) begin
data <= 4’b0;
end
else begin
data <= din;
end
end
endmodule
【例 2】一个采样锁存模块
这也是一个采样锁存模块,但是data对应的不是寄存器(register)而是锁存器(latch)
module sample_latch(clk, rstn, din, dout);
input clk, rstn;
input [3:0] din;
output [3:0] dout;
reg [3:0] data;
assign dout = data;
always @(clk or rstn) begin
if(!rstn) begin
data <= 4’b0;
end
else if(clk) begin
data <= din;
end
end
endmodule
【例 3】一个四选一的多选器
这是一个四选一的多选器,虽然用了always块,但是对应的电路结构是一个纯组合逻辑。
module mux4(sel, a, b, c, d, z);
input [1:0] sel;
input a, b, c, d;
output z;
reg z;
always @(sel or a or b or c or d) begin
case(sel)
2'b00 : z <= a;
2'b01 : z <= b;
2'b10 : z <= c;
2'b11 : z <= d;
endcase
end
endmodule
三、思考和小结
(1)思考
- 下列中哪些是可综合的、哪些是不可综合的
• initial块
• forever块
• repeat, force, release
• assign赋值语句
• always块
(2)小结
作者:xlinxdu
版权:本文版权归作者所有
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。