SV interface and Program3
时钟域的理解

- 在仿真过程中,时钟跳变的一瞬间,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
SV interface and Program3的更多相关文章
- SV中的Interface和Program
Interface:SV中新定义的接口方式,用来简化接口连接,使用时注意在module或program之外定义interface,然后通过'include来添加进工程. interface arb_ ...
- SV学习之interface
普通的模块使用法:注意我们这里只实现了部分功能....不是完全的读写模块.... module mem_core( input logic wen, input logic ren, ...
- Cadence UVM基础视频介绍(UVM SV Basics)
Cadence关于UVM的简单介绍,包括UVM的各个方面.有中文和英文两种版本. UVM SV Basics 1 – Introduction UVM SV Basics 2 – DUT Exampl ...
- Libsvm:脚本(subset.py、grid.py、checkdata.py) | MATLAB/OCTAVE interface | Python interface
1.脚本 This directory includes some useful codes: 1. subset selection tools. (子集抽取工具) subset.py 2. par ...
- Shell_Oracle Erp和其他系统Interface资料传输通过Shell进行控制(案例)
2014-06-26 Created By BaoXinjian
- systemverilog interface
普通的模块使用法:注意我们这里只实现了部分功能....不是完全的读写模块.... module mem_core( input logic wen, input logic ren, ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
- SV class
SV中的class通过new来创建实例,new函数可以传递多个参数: packet P1: P1 = new:创建一个P1的对象: P2 = P1:P2也指向同一个对象: P2 = new P1:P ...
- sv命令空间 packge
SV中的module,interface,program,checker,都提供declaration空间,内部定义都local当前的那个scope,相互之间的building block不影响,不识 ...
- SV通过DPI调用C
Verilog与C之间进行程序交互,PLI(Programming Language Interface)经过了TF,ACC,VPI等模式. 使用PLI可以生成延时计算器,来连接和同步多个仿真器,并可 ...
随机推荐
- 使用 GPT4V+AI Agent 做自动 UI 测试的探索
一.背景 从 Web 诞生之日起,UI 自动化就成了测试的难点,到现在近 30 年,一直没有有效的手段解决Web UI测试的问题,尽管发展了很多的 webdriver 驱动,图片 diff 驱动的工具 ...
- 关于RichEdit的那些坑
项目开发中用到了richedit,但是并没有用到图文的功能,只是说使用他的各种属性,集成了一个自己的超文本编辑器. 开发遇到了各种坑,在这里跟大家分享下: 1: 跳转编辑界面,无法获取焦点. 通过Ri ...
- 2023.3 Idea配置Tomcat环境
tomcat配置 下载tomcat 先到官网(按住Ctrl再左键点击直接打开官网)下载64位的tomcat,网速慢就用魔法下 创建项目.模块 打开idea(我用的是最新的idea的专业版,ui有点变化 ...
- 《华为云DTSE》期刊2023年第二季—HDC.Cloud 2023专刊
本文分享自华为云社区<<华为云DTSE>期刊2023年第二季-HDC.Cloud 2023专刊>,作者: HuaweiCloudDeveloper . AI技术风起云涌,百家争 ...
- PreSTU:一个专门为场景文本理解而设计的简单预训练模型
摘要:在视觉与语言(V&L)模型中,阅读和推理图像中的文本的能力往往是缺乏的.我们如何才能学习出强大的场景文本理解(STU)的V&L模型呢? 本文分享自华为云社区<场景文本理解预 ...
- APP安全加固怎么做?加固技术、加固方法、加固方案
前面的文章中我们为大家介绍了移动应用安全检测的测试依据.测试方法.和测试内容,本文我们着重分享App安全加固的相关内容. (安全检测内容) 通过前面的文章我们知道了app安全检测要去检测哪些内 ...
- A/B 测试成为企业“新窗口”:增长盈利告别经验主义,数据科学才是未来
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 如何能够预知一个产品的未来?最好的办法当然是穿越到未来看一看. 这种"模拟未来.窥探底牌"的设 ...
- 背景 | 基于 Transformers 的编码器-解码器模型
!pip install transformers==4.2.1 !pip install sentencepiece==0.1.95 Vaswani 等人在其名作 Attention is all ...
- 让 ChatGPT 如虎添翼 2.0
月初写了4个工具,让 ChatGPT 如虎添翼!,时隔二十多天,我又发现了基于ChatGPT的应用,只推最好用的,强烈建议大家都感受一下. 极简搭建 ChatGPT 演示网页 项目地址:https:/ ...
- AI 黑科技,老照片修复,模糊变高清
大家好 最近闲逛,发现腾讯开源的老照片修复算法新出了V1.3的预训练模型,手痒试了一下. 我拿"自己"的旧照片试了一下,先看效果 GFPGAN FPGAN算法由腾讯PCG ARC实 ...