lv123362的个人空间 https://blog.eetop.cn/1126258 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

学习张强UVM实战中的寄存器模型必须理解的DUT-带有寄存器配置总线的DUT ...

热度 1已有 2919 次阅读| 2019-6-7 21:35 |系统分类:芯片设计

 声明,不得转载。

 像很多公司芯片一样,该小型DUT有基本的寄存器配置总线。在该DUT中寄存器配置总线信号也就是bus_cmd_valid,bus_op,bus_addr,bus_wr_data和bus_rd_data,这些信号是类似AMBA等协议的关键信号。在真正的芯片soc中,IP与IP之间的通信是需要接口协议的,这些接口协议是一套标准,也就是发送读写地址和数据是有一套时序逻辑关系的,该DUT也有一套简单的寄存器配置总线,可以很好地学习一下。该DUT内部的寄存器invert,它能影响DUT的功能。invert是一个1位的寄存器,为其分配了地址16‘h9。它的值为1,DUT输出时会将输入的数据取反;为0时,会将输入数据直接发送出去。

     invert可以通过总线bus_*进行配置,bus_op为1时表示写操作,为0时表示读操作。bus_addr表示地址,bus_rd_data表示读取的数据,bus_wr_data表示要写入的数据。在clk上升沿到来时,bus_cmd_valid和bus_op都为1时,写入数据到寄存器invert上。在clk上升沿到来时,bus_cmd_valid和bus_op分别为1和0时,读出invert中的寄存器值到bus_rd_data上。

   在编写这个DUT的验证环境的时候,由于寄存器invert是DUT的内部寄存器,并不是输入信号,在例化DUT的时候,DUT上的信号是看不到invert的,也就是说在与DUT连接的interface上是看不到寄存器invert的。但是给输入信号rxd值和输入信号rx_dv值之前,验证环境首先要考虑配置好该内部寄存器invert,由于在interface上看不到该内部寄存器,我们就不能像给输入信号rxd值和输入信号rx_dv值一样,在driver上直接把数据放到与DUT连接的interface上。在interface上我们可以看到bus_*配置总线,这样我们可以写个driver,去驱动这些配置总线bus_*,相应的也就配置好了DUT的内部寄存器invert。内部寄存器invert是一个很重要的信号,在uvm的验证reference中,构建参考模型的时候,也要知道该内部寄存器invert的值,然后才可以把输入信号rxd值和输入信号rx_dv根据invert的值选择相应的方式,模拟DUT的功能。为了更方便的在reference读出DUT内部的寄存器invert的值,可以使用UVM的寄存器模型。

  微信号:chipist1 ,添加微信交流技术以及找工作


  内推大公司:海光, AMD, 兆芯,苏州瑞晟微电子,苏州盛科网络,TI,杭州矽力杰等等。

   招聘:上海,深圳,珠海,广州,成都,杭州,苏州,北京,西安,数字ic设计工程师,数字验证工程师,模拟ic设计工程师,DFT,FPGA,数字后端工程师,RFIC,射频工程师,ae,fae,sales。总有一款适合你,欢迎ICer自荐和推荐。

1、模拟IC设计工程师25-80W(电源方向:初级、高工、经理、总监)均有需求,坐标:深圳/上海/武汉/长沙/南京/苏州/昆山/杭州/成都/西安/北京/厦门。

2、资深模拟IC设计(混合信号),30-100W,  坐标:上海/南京/深圳/昆山/成都/重庆/西安/武汉/珠海/广州/昆山。

3、资深数字IC设计工程师-------苏州、上海、北京、杭州、武汉、成都、西安、四川、广州、深圳、珠海、昆山;

4、数字IC设计前端/后端 工程师-四川/武汉、上海、北京、广州、昆山;

5、FPGA-西安/上海;

6、RFIC资深/专家/VP,射频工程师 -杭州/上海、重庆、成都、深圳、西安、北京、。

7、FAE/AE-武汉/上海/深圳/昆山/厦门;

8、模拟版图设计工程师-武汉/上海/深圳/成都/厦门。

备注:初创型、成熟型、国企、外资企业、甚至合伙人岗位应有尽有。

另外,上海/苏州/成都/昆山分别有数字经理、模拟(ADC/DAC)(DC/DC)(AC/DC)经理

欢迎自荐和推荐(同学/朋友/同事)。谢谢啦!

module dut (clk,rst_n,bus_cmd_valid,bus_op,bus_addr,bus_wr_data,bus_rd_data,rxd,rx_dv,txd,tx_en);

input clk;

input rst_n;

input bus_cmd_valid;

input bus_op;

input [15:0] bus_addr;

input [15:0] bus_wr_data;

output [15:0] bus_rd_data;

input [7:0] rxd;

input rx_dv;

output [7:0] txd;

output tx_en;

reg [7:0] txd;

reg tx_en;

reg invert;

always @(posedge clk) begin

if(!rst_n) begin

  txd<=8’b0;

  tx_en<=1’b0;

end

else if (invert) begin

txd<=~rxd;

tx_en<=rx_dv;

end

else begin

txd<=rxd;

tx_en<=rx_dv;

end

always (posedge clk) begin

if(!rst_n)

   invert <=1’b0;

else if (bus_cmd_valid &&bus_op) begin

 case (bus_addr)

 16’h9: begin

             Invert <=bus_wr_data[0];

            end

default :begin

               end

endcase

end

end

reg [15:0] bus_rd_data;

always @(posedge clk) begin

if(!rst_n)

    bus_rd_data<=16’h0;

    else if (bus_cmd_valid&&!bus_op) begin

        case (bus_addr)

               16’h9: begin

                            bus_rd_data<={15’b0,invert};

                            end

                 default:begin

                               bus_rd_data<=16’b0;

                                end

endcase

end

end

endmodule


点赞

发表评论 评论 (1 个评论)

回复 jingfanchanshi 2021-10-27 13:38
有的模糊,还是看的不太懂

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 8

    粉丝
  • 2

    好友
  • 2

    获赞
  • 2

    评论
  • 1233

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-2 22:58 , Processed in 0.015250 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部