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

虚拟机: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
版权:本文版权归作者所有
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xlinxdu

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值