verilog学习:一个简单的入门verilog例子

前言

00. FPGA开发软件的安装

在高校,verilog的教学大都是基于FPGA学习的,所以学习资源很丰富,我们就可以从这个方向入手!而FPGA学习需要一个软件,下面这就请您去安装软件,前面提到的视频教程就有详细的指导!

  • Quartus II 13.1
  • Modelsim
  • Notepad++
  • Vim
    在这里插入图片描述

01. 我的第一个FPGA工程:点亮led

(1) 一个很简单的verilog设计代码:led.v

在这里,希望初学者,不要有任何质疑:不要纠结东西怎么来的,为什么是这样!因为你在学1+1=2,它不需要你去推敲!

//led.v
module led(
			output wire     led0       ,//ctrl+D快速复制当前行
			output wire     led1       ,
			output wire     led2       ,
			output wire     led3       
);

// EP4CE6E22CBN 是FPGA开发板上的型号。

assign     led0  = 0;
assign     led1  = 0;
assign     led2  = 0;
assign     led3  = 0;

endmodule

(2) Verilog HDL语法

  • 上面这个就是一个很基本的verilog设计代码,下面就简单给读者指出:模块名、端口列表、端口声明等,还有按位操作符之类的基本常识!

在这里插入图片描述
在这里插入图片描述

  • 在这里,一个基本的verilog设计代码就是上面这样的框架,看完视频的您,是不是豁然开朗!

02.板级验证:下载到板子上

  • 这个环节,是什么意思呢?
  • 简单地讲,前面设计的这个代码led.v的功能是点亮一个led灯,放在板子上就是为了验证这个功能!
  • 这就是验证的时候用JTAG调试接口的部分过程
  • **那要不要买个板子试试呢?**小编觉得都行,其实小编是在咸鱼上买了一个很便宜的,做完了所有的实验,实操的感觉真舒服!

分配管脚pin planner

在这里插入图片描述

初次下载代码到FPGA时,需要给下载器安装驱动,Altera USB-Blaster。
驱动目录选择Quartus安装目录下的drivers即可。
在这里插入图片描述

在这里插入图片描述

03.FPGA验证:test.v

  • 这么说哈,对于ASIC,以前没有IC数字验证,就是用这种方式验证的‘’
  • 随着设计复杂度的提高,
  • 这种方式逐渐被sv、uvm等验证方法学所替代,
  • 晓得了吧。
  • 所以说,学IC验证,学verilog是很有必要的,要体验这个过程!
module	test(
		input				port_a			,		//只有wire,没有reg型
		input				port_b			,		//只有wire,没有reg型
		input				port_c			,		//只有wire,没有reg型
		output	wire		port_d			,		//默认为wire
		output	wire		port_e			,
		output	wire		port_f			,
		output	wire		port_g			,
		output	wire		port_h
);

//assign: 对wire型进行赋值
//always:对reg 型进行赋值

assign port_d	=		port_a	&	port_b;
assign port_e	=		port_a	|	port_c;
assign port_f	=		~port_a;
assign port_g	=		port_b ^ port_c;
assign port_h	=		port_a ^~ port_c;

endmodule

04. Modelsim 进行仿真(小编在这里用的questasim)

在这里插入图片描述
在这里插入图片描述

tb_test.v

  • 其实,这里可以和前面的test合并成一个文件,在后面学习完小梅哥的视频,你就会有一个深刻的认识!
`timescale		1ns/1ns       // 时间单位 / 时间精度

module	tb_test;

reg				test_a;
reg				test_b;
reg				test_c;

wire			rslt_d;
wire			rslt_e;
wire			rslt_f;
wire			rslt_g;
wire			rslt_h;

// initial 赋值的信号,必须定义成reg型
initial begin
		test_a	=		1;		// 在0时刻赋初值
		test_b	=		1;		
		test_c	=		1;	
		#5
		test_a	=		0;		// 在5时刻赋初值
		test_b	=		1;		
		test_c	=		1;	
		#5
		test_a	=		0;		// 在10时刻赋初值
		test_b	=		0;		
		test_c	=		0;	
end

test		test_inst(
		.port_a			(test_a			),		//只有wire,没有reg型
		.port_b			(test_b			),		//只有wire,没有reg型
		.port_c			(test_c			),		//只有wire,没有reg型
		.port_d			(rslt_d			),		//默认为wire
		.port_e			(rslt_e			),
		.port_f			(rslt_f			),
		.port_g			(rslt_g			),
		.port_h       	(rslt_h			)
);                    


endmodule

wave

在这里插入图片描述

后记

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杰之行

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值