首页 > 其他分享 >SV interface and Program3

SV interface and Program3

时间:2023-12-27 23:13:56浏览次数:27  
标签:modport addr Program3 mem SV sys logic interface

时钟域的理解

  • 在仿真过程中,时钟跳变的一瞬间,CPU将时间域划分为不同的时钟域执行不同的代码
  • 信号在芯片中都是金属丝,在进行跳变的时候都是电容的充放电过程,通常使用时钟上升沿进行模拟,而不使用时钟下降沿

	// define the interface
interface mem_if(input wire clk);
	logic				reset;     // logic可以作为输入和输出
	logic				we_sys;
	logic				cmd_valid_sys;
	logic				ready_sys;
	logic	[7:0] 		data_sys;
	logic	[7:0]		addr_sys;
	logic				we_mem;
	logic				ce_mem;
	logic	[7:0]		datao_mem;
	logic	[7:0]		datai_mem;
	logic	[7:0]		addr_mem;
	

	// modport for meomry controller interface	
	modport ctrl	(
		input clk,reset,we_sys,cmd_valid_sys,addr_sys,datao_mem,
		output we_mem,ce_mem,addr_mem,datai_mem,ready_sys,
		ref data_sys
	);
	
	//modport for memory model interface
	modport meomry	(
		input clk,reset,we_mem,ce_mem,addr_mem,datai_mem,
		output datao_mem
	);
	// modport for test program
	modport test (
		input clk,ready_sys,
		output reset,we_sys,cmd_valid_sys,addr_sys,
		ref data_sys
	);

endinterface


	// memory model design with interface
	// 传入modport接口
module memory_model (mem_if.memory mif);	
	// memory array
	logic [7:0] mem [0:255];
	
	//write logic 
	always @(posedge mif.clk)
		if(mif.ce_mem && mif.we_mem) begin
			mem[mif.addr_mem] <= mif.datai_mem;
		end
	
	// read logic
	always @(posedge mif.clk)
		if(mif.ce_mem && ~mif.we_mem) begin
			datao_mem <= mem[mif.addr_mem];
		end
endmodule


	// memory controller design with interface
	
module memory_ctrl(mem_if.ctrl cif);
	typedef enum {IDLE,WRITE,READ,DONE} fsm_t;
	fsm_t state;
	
	always @(posedge cif.clk)
		if(cif.reset) begin
			state	<= IDLE;
			cif.we_mem <=	0;
			cif.ce_mem <=	0;
			cif.addr_mem <= 0;
			cif.datai_mem <= 0;
			cif.data_sys <=0;
		end
		else begin
			case(state)
				IDLE: begin
					cif.ready_sys <= 1'b0;
					if(cif.cmd_valid_sys && cif.we_sys) begin
						cif.addr_mem <= cif.addr_sys;
						cif.datai_mem <= cif_data_sys;
						cif.we_mem <= 1'b1;
						cif.ce_mem <= 1'b1;
						state <= WRITE;
					end
					if(cif.cmd_valid_sys && ~cif.we_sys) begin
						cif.addr_mem <= cif.addr_sys;
						cif.datai_mem <= cif_data_sys;
						cif.we_mem <= 1'b0;
						cif.ce_mem <= 1'b1;
						state <= READ;
					end
				end
				WRITE: begin
					cif.ready_sys <= 1'b1;
					if(~cif.cmd_valid_sys) begin
						cif.addr_mem <= 8'b0;
						cif.datai_mem <= 8'b0;
						cif.we_mem <= 1'b0;
						cif.ce_mem <= 1'b0;
						state <= IDLE;
					end
				end
				
				READ: begin
					cif.ready_sys <= 1'b1;
					if(~cif.cmd_valid_sys) begin
						cif.addr_mem <= 8'b0;
						cif.datai_mem <= 8'b0;
						cif.we_mem <= 1'b0;
						cif.ce_mem <= 1'b0;
						cif.ready_sys <= 1'b1;
						state <= IDLE;
						cif.data_sys <= 8'bz;
					end
				end
			endcase
		end
endmodule



program test(mem_if.test tif);

	initial begin
		tif.reset <= 1;
		tif.we_sys <= 0;
		tif.cmd_valid_sys <= 0;
		tif.addr_sys <= 0;
		tif.data_sys <= 8'bz;
		#100 tif.reset <= 0;;
		for(int i = 0;i<4;i++) begin
			@(posedge tif.clk)
			tif.we_sys <= 1;
			tif.cmd_valid_sys <= 1;
			tif.addr_sys <= 1;
			tif.data_sys <= $random;
			@(posedge tif.clk)
			tif.we_sys <= 0;
			tif.cmd_valid_sys <= 0;
			tif.addr_sys <= 0;
			tif.data_sys <= 8'bz;
		end
		repeat(10) (posedge tif.clk)
		// 此模块没有写完....
	end


endprogram



module	top();
	logic clk = 0;
	always #10 clk++;
	
	mem_if 			u_miff(clk);
	memory_ctrl 	u_ctrl(u_miff);
	meomry_model 	u_model(u_miff);
	test			u_test(u_miff);


endmodule

标签:modport,addr,Program3,mem,SV,sys,logic,interface
From: https://www.cnblogs.com/Icer-newer/p/17931495.html

相关文章

  • Burp插件xssValidator的安装及使用
    1.前置环境1.1下载Phantomjs下载地址:http://phantomjs.org/download.html下载后配置环境变量,把bin目录下的这个exe加入环境变量.如图:1.2xss.js下载和配置xss.js是phantomJS检测xss漏洞payload的具体实现。下载地址为:https://github.com/nVisium/xssValidator下载完成后......
  • 【秀米教程7】SVG点击图片,横屏下拉效果动画
    原文链接:https://www.cnblogs.com/MrFlySand/p/17930117.html效果展示效果展示:点击图片展开推文内容效果图操作步骤点击【图文模板】-【SVG】-在左边选择自己想要的下拉效果点击下拉效果图的边框-点击【编辑】显示内容:显示当前编辑下的内容,但不能编辑点击【......
  • C#中 abstract class和interface有什么区别?
    abstractclassabstract声明抽象类抽象方法,一个类中有抽象方法,那么这个类就是抽象类了。所谓的抽象方法,就是不含主体(不提供实现方法),必须由继承者重写。因此,抽象类不可实例化,只能通过继承被子类重写。interface声明接口,只提供一些方法规约,在C#8之前的版本中不提供任何实现,在C#......
  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.27)
    一、百度网盘SVIP超级会员共享账号可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答。我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免了U盘的物理载体,直接在网上就实现文件传输。百度网盘SVIP会员可以让自己百度账......
  • SV 接口中的clocking
    接口module可以例化模块,可以例化接口接口不能例化模块采样和数据驱动时钟驱动数据,数据会有延迟,RTL仿真的时候,不会仿真出这个延时;RTL仿真的时候,不会仿真出寄存器的延时;只有在门级仿真的时候,才会表现出来时钟对于组合电路的驱动会默认增加一个无限最小的......
  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.26)
    合集-网盘(20) 1.百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.17)11-182.记录一次自己写的百度网盘不限速下载脚本11-183.百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.20)11-214.百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.21)11-215.百度网......
  • 智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)
    文章目录一、前言二、资料准备三、智能变电站自动化系统架构四、GOOSE、MMS、SV协议以及其他协议1、GOOSE(通用面向对象变电站事件)协议2、MMS(制造消息规范)协议3、采样值(SV)协议4、数字化变电站中使用的其他协议遗留协议五、IEC61580的开源C库GOOSE协议示例运行问题1、协议栈选择......
  • Intellij IDE 对接SVN
    1.安装SVN(SVN安装包见附件)注意安装时需要选择第二个选项进行安装2.安装SVN中文包(见附件)安装完成后随便找个文件夹右键确认SVN安装是否生效3.IntellijIDE得Setting中配置SVN连接地址配置菜单:File-settings-VersionControl-Subversion需要注意得是当SVN安装到C:......
  • scrapy中运行一段时间报错pymysql.err.InterfaceError: (0, '')
    错误信息Traceback(mostrecentcalllast):File"/home/anaconda3/envs/python36/lib/python3.6/site-packages/twisted/python/threadpool.py",line250,ininContextresult=inContext.theWork()File"/home/anaconda3/envs/python36/lib/p......
  • Python——第五章:csv模块
    未来我们会使用爬虫获取到一些json文件,例如去英雄联盟官方爬取英雄的数据库查看代码{"hero":[{"heroId":"1","name":"\u9ed1\u6697\u4e4b\u5973","alias":"Annie","title":"\u5b89\u59ae","roles"......