zl程序教程

您现在的位置是:首页 >  其他

当前栏目

19 verilog基础语法-可综合设计

基础 设计 语法 19 综合 Verilog
2023-09-14 09:16:17 时间

虚拟机: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)思考

  1. 下列中哪些是可综合的、哪些是不可综合的
    • initial块
    • forever块
    • repeat, force, release
    • assign赋值语句
    • always块

(2)小结

在这里插入图片描述


作者:xlinxdu
版权:本文版权归作者所有
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。