QuartusII和Modelsim联合仿真实现不带时钟信号的简单乘法器

news/2024/5/19 17:56:51 标签: systemverilog, verilog

创建项目

找个地方新建文件夹,设置这个项目的路径为那个文件夹,项目名字可以自己取(为了避免后面的不统一,建议和我取一样的)

从空项目创建

不用添加任何文件

选择开发板,我选择的是这个,然后next

选择simulation方式为modelsim,后面选择SystemVerilog,其他不管,然后next

看到项目的一些信息,finish完成,等待创建好

项目创建好后,做一些准备工作

设置modelsim的路径,以便于联合仿真

Tools-options-EDA tools options,将Modelsim的路径设为本机安装的Modelsim的路径下的win64,ok退出

准备好了后,可以开始写代码了

新建一个verilog>systemverilog 把乘法器代码沾进去,保存,记得模块module名字和文件名字要一样,保存之后记得运行一下

module basic_base2_mul(x_in, y_in, p_out);	
	parameter 	N = 8,
				M = 4;
	input logic [N-1:0] x_in;
	input logic [M-1:0] y_in;
	output logic [N+M-1:0] p_out;

	integer i;
	reg [M:0] wires[N:0];
	initial 
	   begin
	       for (i=0;i<=N;i=i+1) begin
	          wires[i]=0;
	          end
	   end
	       
	
	always @(x_in or y_in)begin
		for(i=0; i<=N-1; i=i+1)begin
			wires[i+1] = mult_by_1(x_in[i], wires[i][M:1], y_in); 
			p_out[i] = wires[i+1][0];
		end
		p_out[N+M-1:N] = wires[N][M:1];
	end

	function [M:0] mult_by_1;		
		input			xi;
		input  [M-1:0] 	A, B;
	
		if(xi)	mult_by_1 = A + B;
		else	mult_by_1 = A;
	endfunction
endmodule

生成testbench,以便于生成产生激励信号文件,用testbench能自动生成模板

Processing-star-star testbench writer

先这样试一下,如果报了这个错的话,在

assignment的setting里按下面图片操作,改成verilog,记得apply 运用

然后再去star一次,按照上面的步骤,说明生成激励文件了

然后就把激励文件运用到项目中去

在自己的项目的文件夹下会发现自动产生了这个文件(有的版本的QuartusII如果没有自动生成的话,就自己创建一个vt文件放到这个目录下。把下面的代码粘贴进去)

记事本打开,修改一下里面的激励文件的信号

从timescale后面的有一点点修改,我的代码在这里(老师上课的时候打开这个文件的时候我截了图,老师下面第一行用的是ns,但我没改了,其实只要加initial里面的内容就好了)改好之后保存,在quartus里面设置这个文件的路径


`timescale 1 ps/ 1 ps

module basic_base2_mul_vlg_tst();

// constants                                          

// general purpose registers

reg eachvec;

// test vector input registers

reg [7:0] x_in;

reg [3:0] y_in;

// wires                                              

wire [11:0]  p_out;



// assign statements (if any)                         

basic_base2_mul i1 (

// port map - connection between master ports and signals/registers  

       .p_out(p_out),

       .x_in(x_in),

       .y_in(y_in)

);

initial                                               

begin                                                 

// code that executes only once                       

// insert code here --> begin                         

x_in = 8'd0;  y_in = 4'd2;

#30 

x_in = 8'b00000100; y_in = 4'b0100;                 

// --> end                                            

$display("Running testbench");                      

end                                                   

always                                                

// optional sensitivity list                          

// @(event1 or event2 or .... eventn)                 

begin                                                 

// code executes for every event on sensitivity list  

// insert code here --> begin                         

                                                      

@eachvec;                                              

// --> end                                            

end                                                   

endmodule

又来到assignment-setting-simulation,下面选择compile testbench

点击下面浏览文件,进去这个目录找到这个文件,再add,一路ok,apply回去

跳到RTL,转到modelsim

打开到这边等编译完成

点击这边的run可以看到有线出来了

,但是这个时候是没有数据的,因为8‘hxx,后面的xx就代表数据

8意思是8个二进制位,也就是后面的数字时8bit的,h代表这个数字时16进制的,xx其实就告诉你了后面的你就写两位的数字就好了,因为两个十六进制位就相当于八个二进制位(我觉得是这样的)

右键那个位置,force设置数据

设置第一个和第二个,也就是x和y

这是个乘法器,故可得到答案

又再改一次再run就会有各种结果出来

十六进制的乘法满16进1

4*4 = 16

故进1余0得到结果10,在第三行


http://www.niftyadmin.cn/n/1305143.html

相关文章

腾讯云centos7安装静默安装oracle

特别感谢这位学长&#xff08;or学姐&#xff09;的资料 安装过程 获得oracle的两个安装压缩包&#xff0c;可以从官网获取到本地&#xff0c;再用xftp传到云服务器上&#xff0c;或者直接在云服务器上用wget来获得&#xff08;只要网好网站ok你能获得到&#xff09; 下面呢我…

windows安装oracle instant client并用navicat连接云服务器上的oracle(一)

第一部分解决的是连接超时问题&#xff0c;是云服务器上面的一些配置问题 第二部分正式在windows上安装oracle instant client 一、本人所具有相关的一些环境 远程&#xff1a; 腾讯云服务器 centos7.5 64位 已安装好oracle11g&#xff08;oracle安装教程见上一篇博客&#xf…

windows安装oracle instant client并用navicat连接云服务器上的oracle(二)

第一部分解决的是连接超时问题&#xff0c;是云服务器上面的一些配置问题 第二部分正式在windows上安装oracle instant client 解决超时问题后&#xff0c;再次从navicat连接&#xff1a; 会发现不是超时的问题&#xff0c;而是另一个问题 ORA-12514:TNS:listener does not …

计算机网络体系结构基本概念、网络协议、TCP/IP模型简介

计算机网络体系结构 源自《计算机网络》第六版–谢希仁编著 简介 主要包含 OSI七层模型&#xff08;开放系统互联基本参考模型&#xff09;&#xff0c;是理论上的标准&#xff1b; TCP/IP模型&#xff0c;事实上的国际标准 协议与划分层次 网络协议&#xff08;简称协议&…

JavaScript学习笔记--BOMDOM(JavaScript高级程序设计第4版)

BOM&&DOM基础知识BOMwindow对象Global对象作用域窗口关系窗口位置与像素比窗口大小视口位置导航与打开新窗口定时器setTimeout&#xff08;&#xff09;location对象查询字符串操作地址navigator对象检测插件操作系统navigator.platformscreen对象history对象导航lengt…

JavaScript学习笔记--变量与数据类型(一)----变量声明、基础运算符以及控制结构

变量、数据类型&#xff08;一&#xff09;变量声明var操作符let操作符let和varconst作用域总结运算符控制结构for...of、for...in、hasOwnProperty、in变量声明 变量的声明有三种关键字let、const和var var操作符 作用域 var操作符定义的变量会成为包含它的函数的局部变量…

JavaScript学习笔记--变量与数据类型(二)----基本数据类型以及String、Number、Boolean包装类型

变量、数据类型&#xff08;二&#xff09;基本数据类型StringNumberBigIntBooleannullundefinedSymbol基本数据类型相关要点原始值的包装类型引用类型和原始值包装类型的主要区别Boolean的包装类型Number的包装类型String 包装类型常用的字符串操作方法基本数据类型 基本数据…

JavaScript学习笔记--变量与数据类型(三)----引用数据类型Object、Array详细介绍

引用数据类型引用数据类型&#xff08;对象类型&#xff09;统称为ObjectObjectObject创建Object实例都有如下属性和方法ArrayArray构建Array方法与属性lengthconstructorprototypeArray.from()和Array.of()判断一个对象是不是数组keys(),values(),entries()&#xff0c;迭代器…