当前位置: 首页 > news >正文

网站的页面设计/个人网站设计作品

网站的页面设计,个人网站设计作品,网站必须公安备案吗,wordpress淘宝客插件数字硬件建模SystemVerilog-使用结构体和联合体的例子使用结构体和联合体的例子结构体和联合体可以包括压缩或非压缩数组,压缩结构体或联合体只能包括压缩数组。压缩和非压缩的数组可以将结构体和联合体作为元素包含在数组中。在压缩数组中,结构体或联合…

数字硬件建模SystemVerilog-使用结构体和联合体的例子

f021b11d07d5adaa111a623100237ac4.png

使用结构体和联合体的例子

结构体和联合体可以包括压缩或非压缩数组,压缩结构体或联合体只能包括压缩数组。

8d49629a5a29e698275febab33bfa3bf.png

压缩和非压缩的数组可以将结构体和联合体作为元素包含在数组中。在压缩数组中,结构体或联合体也必须是压缩的。

ac12436010c6874b0004f2ba990be28b.png

数组可以包含自定义结构体和自定义联合体。综合支持数组中的压缩或非压缩结构体。

示例4-8说明了如何使用结构体数组,该示例是一个指令寄存器模型,其中包含32条指令的非压缩数组,每条指令是一个复合值,表示为压缩结构体。指令中的操作数可以是有符号的或无符号的,表示为两种类型的联合体。

该指令寄存器的输入包括单独的操作数、一个操作码和一个指示操作数是有符号的还是无符号的标志。该模型将这些单独的输入值加载到指令寄存器阵列中。一种写入指针输入控件,用于加载数据。该模型的输出是单个指令结构体,使用读指针输入从指令寄存器中选择。

本例使用了前面示例4-6中所示的相同包项。

示例4-6:包含结构体和联合体定义的包
//
// Package with union and structure definitions
//
//`begin_keywords "1800-2012" // use SystemVerilog-2012 keywords
`define _4bit        // use 4-bit data for testing synthesis
//`define _32bit     // use 32-bit data word size
//`define _64bit     // use 64-bit data word size
package definitions_pkg;`ifdef _4bittypedef logic        [ 3:0] uword_t;typedef logic signed [ 3:0] sword_t;`elsif _64bittypedef logic        [63:0] uword_t;typedef logic signed [63:0] sword_t;`else  // default is 32-bit vectors typedef logic        [31:0] uword_t;typedef logic signed [31:0] sword_t;`endif typedef enum logic [2:0] {ADD, SUB, MULT, DIV} op_t;typedef enum logic {UNSIGNED, SIGNED} operand_type_t;// Packed union represents a variable that can store // different typestypedef union packed {uword_t u_data;sword_t s_data;} data_t;// Packed structure represents a collection of variables // that can referenced and passed through ports as a grouptypedef struct packed {op_t            opcode;operand_type_t  op_type;data_t          op_a;data_t          op_b;} instruction_t;
endpackage: definitions_pkg
//`end_keywords 
示例4-8:使用结构体数组对指令寄存器建模
//`begin_keywords "1800-2012" // use SystemVerilog-2012 keywords
module instruction_register
import definitions_pkg::*;   // wildcard import the package
(input  logic          clk, rstN, load_en,
input  data_t         op_a,
input  data_t         op_b,
input  operand_type_t op_type,
input  op_t           opcode,
input  logic [4:0]    write_pointer,
input  logic [4:0]    read_pointer,
output instruction_t  iw
);timeunit 1ns; timeprecision 1ns;instruction_t  iw_reg [0:31];  // array of structures// write to the register arrayalways_ff @(posedge clk or negedge rstN) // async resetif (!rstN) begin                       // active-low resetforeach (iw_reg[i])iw_reg[i] <= '{opcode:ADD,default:0}; // reset valuesend else if (load_en) begin case (op_type)SIGNED:   iw_reg[write_pointer] <= '{opcode,op_type,op_a.s_data,op_b.s_data};UNSIGNED: iw_reg[write_pointer] <='{opcode,op_type,op_a.u_data,op_b.u_data};endcase end // read from the register arrayassign iw = iw_reg[read_pointer];endmodule: instruction_register
//`end_keywords

图4-5显示了综合该示例的结果。说明了如何使用结构体和联合体、数组来建模大量设计功能,只需很少的代码。示意图右上角的矩形符号是综合编译器选择报告的通用RAM的实例(在RTL模型中数组的存储。)综合编译器将在综合的最后一步将该通用RAM作为一个或多个同步存储设备来实现,其中通用门级功能映射到特定的ASIC或FPGA设备。

图4-5:示例4-8的综合结果:带结构体的指令寄存器e63ad91ef7d9fae1c313d96c2ef79db6.png

附录-TestBench

//`begin_keywords "1800-2012"
module testimport definitions_pkg::*;(input  logic          test_clk,output logic          load_en,output logic          rstN,output data_t         op_a,output data_t         op_b,output op_t           opcode,output operand_type_t op_type,output logic [4:0]    write_pointer,output logic [4:0]    read_pointer,input  instruction_t  iw);timeunit 1ns; timeprecision 1ns;int seed = 555;initial begin$display("\nReseting the instruction register...");write_pointer  = 5'h00;           // initialize write pointerread_pointer   = 5'h1F;           // initialize read pointerload_en        = 1'b0;            // initialize load control linerstN          <= 1'b0;            // assert rstN (active low)repeat (2) @(posedge test_clk) ;  // hold in reset for 2 clk cyclesrstN           = 1'b1;            // deassert reset_n (active low)$display("\nWriting values to register stack...");op_type     = SIGNED;op_a.s_data =  3;op_b.s_data = -5;opcode      = ADD;load_en     = 1'b1;  // enable writing to register@(posedge test_clk) ;for (int i=0; i<=2; i++) beginwrite_pointer = i;$display("Writing to register location %0d: ", write_pointer);$display("  opcode = %0d (%s)", opcode, opcode.name);$display("  op_type = %0d (%s)", op_type, op_type.name);if (op_type == SIGNED) begin$display("  op_a.s_data = %0d",   op_a.s_data);$display("  op_b.s_data = %0d\n", op_b.s_data);end else begin$display("  op_a.s_data = %0d",   op_a.u_data);$display("  op_b.s_data = %0d\n", op_b.u_data);end@(negedge test_clk) ;op_a++;op_b--;opcode = op_t'(opcode + 1);op_type = op_type.next;endload_en = 1'b0;  // turn-off writing to register// read back and display same three register locations$display("\nReading back the same register locations written...");for (int i=0; i<=2; i++) begin@(posedge test_clk) read_pointer = i;@(negedge test_clk) ;$display("Read from register location %0d: ", read_pointer);$display("  iw.opcode = %0d (%s)", iw.opcode, iw.opcode.name);$display("  iw.op_type = %0d (%s)", iw.op_type, iw.op_type.name);if (iw.op_type == SIGNED) begin$display("  iw.op_a.s_data = %0d",   iw.op_a.s_data);$display("  iw.op_b.s_data = %0d\n", iw.op_b.s_data);end else begin$display("  iw.op_a.s_data = %0d",   iw.op_a.u_data);$display("  iw.op_b.s_data = %0d\n", iw.op_b.u_data);endend@(posedge test_clk) $finish;end
endmodule: testmodule top;timeunit 1ns; timeprecision 1ns;import definitions_pkg::*;logic          clk;logic          test_clk;logic          rstN;logic          load_en;logic          reset_n;op_t           opcode;operand_type_t op_type;data_t         op_a, op_b;logic [4:0]    write_pointer, read_pointer;instruction_t  iw;test                 test (.*);instruction_register dut  (.*);initial beginclk <= 0;forever #5  clk = ~clk;endinitial begintest_clk <=0;// offset test_clk edges from clk to prevent races between// the testbench and the design#4 forever begin#2ns test_clk = 1'b1;#8ns test_clk = 1'b0;endend
endmodule: top
//`end_keywords

3ff1473a7e3353d80df2c3b5b9dcb0cf.jpeg

SystemVerilog-联合体(union)

d76a8b993bcb6825b30426a6fb2a742a.jpeg

SystemVerilog-结构体(二)

f23fb1a795a7429d10792b02235c81fd.jpeg

SystemVerilog-结构体(一)

http://www.lbrq.cn/news/1327285.html

相关文章:

  • 汕头建设局网站/潍坊seo推广
  • 敦煌网站做外贸怎样/福州网站开发公司
  • 绍兴网络公司网站建设/百度网盘下载速度
  • 幼儿园网站建设总结/简述seo的基本步骤
  • 中国建设教育网站/google下载安装
  • 电子商务网站建设与管理期末考试题/n127网推广
  • 做公众号必了解的网站/搜索引擎关键词排名
  • 给被k的网站做友链/做网站推广需要多少钱
  • 网站建设费用选网络专业/金泉网做网站多少钱
  • 网站建设寻求/郑州粒米seo顾问
  • 网站开发维护岗位职责/推广普通话内容
  • 长春网站运做思路/济南网站设计
  • 企业网站模板 简洁/青岛seo排名扣费
  • 网站 网络架构/关键词推广价格
  • 建设网站必须要配置apache吗/网络游戏营销策略
  • 网站建设套餐价格/整站关键词快速排名
  • wordpress支持论坛/济南seo整站优化招商电话
  • 网站聊天室怎样做炫彩马甲/免费发广告的软件
  • 东莞整合网站建设开发/今日财经新闻
  • 横沥镇做网站/长沙官网seo推广
  • 重庆建设工程信息网官网入口查询/seo的中文含义是
  • wordpress服装模板/sem优化软件选哪家
  • 大连华南网站制作公司/网络营销计划包括哪七个步骤
  • 建设网站上传软件/seo搜索引擎工具
  • 网站建设维护人员岗位/百度推广排名怎么做的
  • 网站后台无上传图片按钮/网站域名查询
  • 个人做网站最方便的方法/推广引流哪个软件最好
  • 哈尔滨网站建设30t/seo外推
  • 徐州建设网站/东莞头条最新新闻
  • 那个网站可以找人做设计师/360建站系统
  • AR智能巡检系统:制造业设备管理的效率革新
  • 【暑期每日一题】洛谷 P9390 金盏花
  • 常用设计模式系列(十七)—命令模式
  • 数据库中使用SQL作分组处理01(简单分组)
  • 【音视频】WebRTC 开发环境搭建-Web端
  • Python 程序设计讲义(46):组合数据类型——集合类型:集合间运算