FPGA学习第二课 实现3-8译码器

  • FPGA学习笔记—第二课
  • 本篇将给出完整的工程创建过程,另外给出所有的代码,其中包含必要的注释,可以用于学习Verilog HDL语法。
1. 创建工程
(1)使用向导创建,找到对应的芯片...

FPGA学习第二课 实现3-8译码器_第1张图片

(2)选择第一个 空项目

FPGA学习第二课 实现3-8译码器_第2张图片

(3)因为目前没有写好的模块,这里直接next

FPGA学习第二课 实现3-8译码器_第3张图片

(4)选择器件

FPGA学习第二课 实现3-8译码器_第4张图片

(5)选择EDA仿真软件

FPGA学习第二课 实现3-8译码器_第5张图片

(6)点击完成 finish

FPGA学习第二课 实现3-8译码器_第6张图片

(7)新建Verilog HDL文件

FPGA学习第二课 实现3-8译码器_第7张图片

(8)这时候点击另存为,放到code文件夹里面,后面写起代码来随时保存就可以了

FPGA学习第二课 实现3-8译码器_第8张图片

  • 逻辑模块代码 decoder.v
/*
3-8译码器
*/

module decoder(a,b,c,out);  // 括号里面是端口列表 ABC三个输入  一个输出

	input a; // 输入端口A
	input b;
	input c;

	output reg [7:0]out;  // 定义8位位宽的数据
	
	// 逻辑设计
	always@(a,b,c)begin  // 括号里面是敏感列表 其中任意一个发生变化,就会执行里面的内容
		case({a,b,c})  	// 花括号 位拼接 生成一个三位的信号
			3'b000:out = 8'b0000_0001;  // 3表示信号的位宽  b 表示二进制 只有0 or 1,三位就对应abc的信号 在此列出所有8种情况
			3'b001:out = 8'b0000_0010; 
			3'b010:out = 8'b0000_0100;
			3'b011:out = 8'b0000_1000;
			3'b100:out = 8'b0001_0000;
			3'b101:out = 8'b0010_0000;
			3'b110:out = 8'b0100_0000;
			3'b111:out = 8'b1000_0000;  //default: // 没有被完全包含的情况
		endcase
	end
	
endmodule
(9)
创建testbench,步骤同上
不过建议testbench单独建立一个和文件夹存放代码。
完成后 Ctrl+k 查看语法有无错误...
  • testbench代码文件里面写入如下代码
/*
testbench 
一张桌子 信号源-》模块-》输出 
*/

`timescale 1ns/1ns     //  时间单位/分辨率

module decoder_tb;
	
	// 定义接口
	// 激励信号
	reg a;
	reg b;
	reg c;
	
	// 输出信号 8位
	wire [7:0] out;
	
	// 把模块名和端口复制过来  注意,这里类似于“实例化”  其次端口也需要例化 在前面加.  在后面加小括号填入信号
	decoder u1(
		.a(a),
		.b(b),
		.c(c),
		.out(out)
		);

		// 开启信号变化 用于仿真
		initial begin

			a = 0; b = 0; c = 0;
			#200;  // 延时200ns
			
			a = 0; b = 0; c = 1;
			#200;

			a = 0; b = 1; c = 0;
			#200;

			a = 0; b = 1; c = 1;
			#200;
			
			a = 1; b = 0; c = 0;
			#200;
			
			a = 1; b = 0; c = 1;
			#200;

			a = 1; b = 1; c = 0;
			#200;		
			
			a = 1; b = 1; c = 1;
			#200;
			
			$stop;
		end
			
endmodule
(10)设置EDA准备仿真,添加
(11)下面的代码文件,最后点击OK

FPGA学习第二课 实现3-8译码器_第9张图片

(12)开始(前)仿真

FPGA学习第二课 实现3-8译码器_第10张图片

(13)查看仿真结果

FPGA学习第二课 实现3-8译码器_第11张图片

(14)Ctrl+L 全编译

(15)
门级仿真 Gate level Simulation 。
此时考虑器件延时
  • 这里就需要一些数电基础,才能理解逻辑器件实际为什么会产生门级仿真的现象。在此就不贴图了,现象是输出端会有尖峰波形,放大观察会发现输出按照格雷码变化。这种跳变在输出端电路灵敏的情况下会导致逻辑错误。怎么解决?后面讲时序逻辑电路再议。

  • 注意,如果不关闭仿真界面就继续编译,会报错…

参考&致谢

小梅哥FPGA

–ti–wai–hua–
…… 最近感觉很是落魄…意义何在?…可能一个人呆的太久了……与世隔绝……

你可能感兴趣的:(#,FPGA)