• FPGA入门学习(一) - 第一个FPGA工程


    Verilog代码书写及相关语法

    test.v

    // 模块名和文件名一致
    module test(       
    		input				port_a				, // 只有wire,没有reg,默认wire
    		input				port_b				, 
    		input				port_c				, 
    		output	wire		port_d				, // 默认wire(导线),也有reg(寄存器)   
    		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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    tb_test.v

     // `timescale		1ns/1ps			// 时间单位 / 时间精度(类似于刻度尺,单位cm,精度ms)
     `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	=			0;  	
    		test_c	=			1;	
    		#5							// 延时5ns
    		test_a	=			0;  	
    		test_b	=			1;  	
    		test_c	=			1;			
    		#5							
    		test_a	=			0;  	
    		test_b	=			0;  	
    		test_c	=			0;	
     end
     
     // 模块例化(类似于函数调用)
     test			test_inst(       
    		.port_a					(test_a), 
    		.port_b					(test_b), 
    		.port_c					(test_c), 
    		.port_d					(rslt_d),   
    		.port_e					(rslt_e),
    		.port_f					(rslt_f).port_g					(rslt_g).port_h					(rslt_h)
    ); 
     
     endmodule
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    Modelsim仿真步骤

    • 第一步:新建工程。
      在这里插入图片描述
    • 第二步:指定工程名和保存路径,其余默认不动。
      • Project Name:aaa
      • Project Location:./sim
        在这里插入图片描述
    • 第三步:添加已存在的文件test.v和tb_test.v。
      在这里插入图片描述
      在这里插入图片描述
    • 第四步:编译添加后的文件。
      在这里插入图片描述
      • 编译成功后,可以看到文件的status变为绿色对号。
        在这里插入图片描述
        提示信息显示成功。
        在这里插入图片描述
    • 第五步:切换到Library下,找到work文件,点击+号,发现test和tb_test文件。
      在这里插入图片描述
      在这里插入图片描述
    • 第六步:对tb_test文件启动仿真,文件上右键,Simulate without Optimization
      在这里插入图片描述
    • 第七步:弹出的sim窗口中,可以看到例化模块名
      在这里插入图片描述
    • 第八步:在tb_test上右键添加Wave,在test_inst上右键添加Wave。
      在这里插入图片描述
      在这里插入图片描述
    • 第九步:将Wave窗口独立显示出来,默认布局中点击如下图标。
      在这里插入图片描述
    • 第十步:Wave窗口左侧,测试端口和模块端口都已列表形式展现出来。
      在这里插入图片描述
      • 点击左下角图标,不显示路径,更为简洁
        在这里插入图片描述
        在这里插入图片描述
    • 第十一步:智能分组,Ctrl + A,Ctrl + G。
      在这里插入图片描述
    • 第十二步:修改运行时间,点击Run
      在这里插入图片描述
      在这里插入图片描述
    • 第十三步:点击Run后,波形不明显,点击全局预览
      在这里插入图片描述
      • 光标处放大
        在这里插入图片描述
    • 第十四步:检验波形是否正确,从而检验代码逻辑是否正确。
  • 相关阅读:
    Modbus在Java中使用总结
    【BI看板】Superset2.0+图表二次开发初探
    Java循环控制语句
    svn的常规使用
    【练习】检测U盘并自动复制内容到电脑的软件
    【Java开发】 Spring 06 :Spring MVC 实践详解(Spring Boot+MyBatis-Plus+JSP 项目)
    【HMS core】【IAP Kit】【FAQ】华为支付典型问题集
    java面试题整理《基础篇》四
    Java对象深拷贝 终极方案 deep clone an object
    一键部署区块链背后的秘密(下)
  • 原文地址:https://blog.csdn.net/weixin_43636084/article/details/125978988