基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十二章:存储器

简介: 基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十二章:存储器

1单选(2分)

常数可以用简单的十进制数格式书写,也可以按基数格式书写

[size] ’ base value

size是位宽,base是基数,value是基于base的值的数字序列:

o或O表示八进制

b或B表示二进制

d或D表示十进制

h或H表示十六进制

下面不正确的描述是( )

得分/总分

A.7’Hx

B.4’D9

C.4’hz

D.5’O28

正确答案:D

2单选(2分)

‌存储器可以由reg变量组成的数组描述,

例如:reg [0:3] MEM [0:63]; 表示MEM是一个由64个4位reg变量组成的数组。

下面赋值中错误的是()。

得分/总分

A.

reg [7:0] mem_a [63:0], mem_b[63:0];
integer i;
for(i=0;i<64; i=i+1) mem_ai=mem_b[i];

B.

reg [1:5] qburst;
qburst=5'b11011;

C.

reg [0:3] xp_rom [1:4];
xp_rom[1]=4'hA;
xp_rom[2]=4'h8;
xp_rom[3]=4'hF;
xp_rom[4]=4'h2;

D.

reg hold_gnt [1:5];
hold_gnt=5'b11011;

正确答案:D

3单选(2分)

<<是()运算符,如果有下面的定义:

reg [7:0] qreg;
qreg = 8'h17;

则:qreg<<2的结果是()。

得分/总分

A.右移,8’b01011100

B.右移,8’b00000101

C.左移,8’b01011100

D.左移,8’b00000101

正确答案:C

4单选(2分)

是()运算符,表达式28的值是()?

得分/总分

A.没有此运算符

B.乘法,16

C.取模,2

D.求幂,256

正确答案:D

5单选(2分)

下面对局部参数的说明错误的是()

得分/总分

A.实例引用该模块时,可以通过参数传递对局部参数进行修改2.00/2.00

B.局部参数是模块内部的参数

C.局部参数可以用其它非局部参数定义

D.局部参数所用的关键词为localparam

正确答案:A

6单选(2分)

实验内容1要求设计一个16*8的ROM实现七段译码器,用存储器的____位地址作为七段译码器的____,相应存储单元的____位数据作为七段译码器的____,每个存储单元中初始化为字符的____.

得分/总分

A.4,数据输入,8,译码输出,数码管段码

B.8,译码输出,16,数据输入,数码管段码

C.8,译码输出,4,数据输入,数码管段码

D.16,数据输入,8,译码输出,数码管段码

正确答案:A

7单选(2分)

‌实验内容2用32*32的RAM实现寄存器堆,选出合适的存储器描述

得分/总分

A.

localparam MEMDEPTH=1<<5 
logic [31:0] mem MEMDEPTH->

B.

localparam MEMDEPTH=1<<5 
logic  mem MEMDEPTH>

C.

localparam MEMDEPTH=2**5;
logic [4:0] mem [0:MEMDEPTH-1];

D.

localparam MEMDEPTH=32;
logic [31:0] mem [0:MEMDEPTH];

正确答案:A

8多选(3分)

小结使用FPGA片内存储资源设计存储器,有哪些特点

得分/总分

A.可生成的容量较大

B.读出需要时钟

C.不占用逻辑资源

D.较好保证存储器性能

正确答案:A、B、C、D你选对了

9判断(2分)

使用Intel FPGA 设计逻辑电路时,存储器的不同描述方法对FPGA资源的利用不同,可以在综合报告中查看资源的使用情况,FPGA内部有专门的存储资源,设计时建议使用FPGA存储资源。

得分/总分

A.√

B.×

正确答案:A

10判断(2分)

下面的两种存储器的描述方法:

方法1

module RAM
#( parameter ADDRWIDTH=6,
parameter DATAWIDTH =32)
( input wire iclk,iWR,
input wire [5:0] iAddress,
input iWriteData,
output oReadData
);
localparam MEMDEPTH=1<<ADDRWIDTH;
logic [DATAWIDTH -1:0] mem [0:MEMDEPTH-1];
always_ff@(posedge iclk)
begin
if (iWR)
mem[iAddress]<=iWriteData;
end
assign oReadData=mem[iAddress];
endmodule

方法2

module RAM
#( parameter ADDRWIDTH=6,
parameter DATAWIDTH =32)
( input wire iclk,iWR,
input wire [5:0] iAddress,
input iWriteData,
output oReadData
);
localparam MEMDEPTH=1<<ADDRWIDTH;
logic [DATAWIDTH -1:0] mem [0:MEMDEPTH-1];
logic [DATAWIDTH -1:0] read_addr;
always_ff@(posedge iclk)
begin
read_addr<=iAddress;
if (iWR)
mem[iAddress]<=iWriteData;
end
assign oReadData=mem[read_addr];
endmodule

第一种描述方法会消耗较多FPGA逻辑资源;

第二种描述方法会使用FPGA内部存储资源。

得分/总分

A.×

B.√

正确答案:B

解析:第二种方法增加了读地址锁存,编译器使用FPGA的RAM块生成存储器

11判断(2分)

initial语句可用于给存储器设置初值

得分/总分

A.×

B.√

正确答案:B

12判断(2分)

logic [DATAWIDTH -1:0] mem [0:MEMDEPTH-1];

下面的initial语句块中,使用系统函数从把文件内容读出,填入mem数值,这个文件的值是使用2进制表示的。

initial begin
$readmemh("init_mem.txt",mem);

得分/总分

A.×

B.√

正确答案:A

解析:init_mem.txt的内容范例:@00 11000000@01 11111001@02 10110011@0A 10110100@0F 10001000@后面表示地址,地址用十六进制表示,数据可以用2进制也可以用16进制表示,如果使用2进制表示数据,使用 $readmemb读出文件如果使用16进制表示数据,使用 $readmemh读出文件

实验代码

使用rom时的virtualboard

`default_nettype none 
module VirtualBoard (
    input  logic  CLOCK,      // 10 MHz Input Clock 
    input  logic [19:0] PB,   // 20 Push Buttons, logical 1 when pressed
    input  logic [35:0] S,    // 36 Switches
    output logic [35:0] L,    // 36 LEDs, drive logical 1 to light up
    output logic  [7:0] SD7,  // 8 common anode Seven-segment Display
    output logic  [7:0] SD6,
    output logic  [7:0] SD5,
    output logic  [7:0] SD4,
    output logic  [7:0] SD3,
    output logic  [7:0] SD2,
    output logic  [7:0] SD1,
    output logic  [7:0] SD0
);
/** The input port is replaced with an internal signal **/
wire [3:0] hexData  = S[11:8];
/************* The logic of this experiment *************/
wire [7:0] segData;
ROM ssdecode_inst(.iAddress(hexData), .oData(segData));
/****** Internal signal assignment to output port *******/
assign SD1 = segData;
assign L[7:0]=segData;
endmodule

ROM

module ROM
#(  parameter ADDRWIDTH = 4,
  parameter DATAWIDTH = 8)
(
    input  logic [ADDRWIDTH-1:0] iAddress,
    output logic [DATAWIDTH-1:0] oData
);
    localparam MEMDEPTH = 1<<ADDRWIDTH;
    logic [DATAWIDTH-1:0] mem[0:MEMDEPTH-1];
    assign oData = mem[iAddress];
    initial begin
    //    $readmemb("init_mem.txt",mem); // 如果文件中的数据是十六进制,用 $readmemh 
        /* 也可以采用如下代码代替上面的readmemh
        mem[n'h00] = n'...;
        ......                   */
   mem[4'h0]=8'b11000000;
  mem[4'h1]=8'b11111001;
  mem[4'h2]=8'b10100100;
  mem[4'h3]=8'b10110000;
  mem[4'h4]=8'b10011001;
  mem[4'h5]=8'b10010010;
  mem[4'h6]=8'b10000010;
  mem[4'h7]=8'b11111000;
  mem[4'h8]=8'b10000000;
  mem[4'h9]=8'b10010000;
  mem[4'hA]=8'b10001000;
  mem[4'hB]=8'b10000011;
  mem[4'hC]=8'b11000110;
  mem[4'hD]=8'b10100001;
  mem[4'hE]=8'b10000110;
  mem[4'hF]=8'b10001110;
  end
endmodule

使用RAM时的virtualboard

`default_nettype none 
module VirtualBoard (
    input  logic  CLOCK,      // 10 MHz Input Clock 
    input  logic [19:0] PB,   // 20 Push Buttons, logical 1 when pressed
    input  logic [35:0] S,    // 36 Switches
    output logic [35:0] L,    // 36 LEDs, drive logical 1 to light up
    output logic  [7:0] SD7,  // 8 common anode Seven-segment Display
    output logic  [7:0] SD6,
    output logic  [7:0] SD5,
    output logic  [7:0] SD4,
    output logic  [7:0] SD3,
    output logic  [7:0] SD2,
    output logic  [7:0] SD1,
    output logic  [7:0] SD0
);
/********* Seven-segment decoder instantiation **********/
logic [3:0] HD[7:0];  // 8 hexadecimal display 
SevenSegDecode ssdecode_inst7(.iData(HD[7]), .oSeg(SD7));
SevenSegDecode ssdecode_inst6(.iData(HD[6]), .oSeg(SD6));
SevenSegDecode ssdecode_inst5(.iData(HD[5]), .oSeg(SD5));
SevenSegDecode ssdecode_inst4(.iData(HD[4]), .oSeg(SD4));
SevenSegDecode ssdecode_inst3(.iData(HD[3]), .oSeg(SD3));
SevenSegDecode ssdecode_inst2(.iData(HD[2]), .oSeg(SD2));
SevenSegDecode ssdecode_inst1(.iData(HD[1]), .oSeg(SD1));
SevenSegDecode ssdecode_inst0(.iData(HD[0]), .oSeg(SD0));
/** The input port is replaced with an internal signal **/
wire reset  = PB[0];
wire clk    = PB[1];
wire write_enable=S[6];
wire [3:0] write_data  = S[11:8];
wire [1:0] address1 = S[1:0];
wire [1:0] address2 = S[3:2];
logic [3:0] RA1;
logic [3:0] RA2;
wire [1:0] WA=S[5:4];
/************* The logic of this experiment *************/
RAM #(.ADDRWIDTH(2), .DATAWIDTH(4)) mem(.iClk(clk), .iWR(write_enable), .iWA(WA),
    .iAddress1(address1), .iAddress2(address2),.iWriteData(write_data), .oReadData1(RA1),.oReadData2(RA2));
/****** Internal signal assignment to output port *******/
assign HD[4] = RA1[3:0];
assign HD[5] = RA2[3:0];
endmodule

RAM

module RAM
#(  parameter ADDRWIDTH = 6,
    parameter DATAWIDTH = 32)
(
  input  wire iClk, iWR,
  input  wire [ADDRWIDTH-1:0] iAddress,
  input  wire [DATAWIDTH-1:0] iWriteData,
  output wire [DATAWIDTH-1:0] oReadData
);
  localparam MEMDEPTH = 1<<ADDRWIDTH; //存储器的字数 
  logic [DATAWIDTH-1:0] mem[0:MEMDEPTH-1];
  always_ff @(posedge iClk)
  begin
    if (iWR)
      mem[iAddress] <= iWriteData;
  end
  assign oReadData = mem[iAddress]; // 读地址未锁存,编译器使用FPGA的逻辑资源生成存储器
  /* initial 为了调试方便可给存储器赋初值,调试成功后将其删除。
      $readmemh("init_data.txt",mem);  // 存储器内容定义在文件中。 */
endmodule


目录
相关文章
|
7月前
|
人工智能 并行计算 openCL
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
随着 Llama2 的开源,以及通义千问、百川、智谱等国内大模型的问世,很多用户有了本地部署去尝试大模型的需求,然而硬件的需求阻碍了很多人的尝试,并不是所有人都拥有一块英伟达显卡的,所以 Llama2 问世不久,大神 Andrej Karpathy 的一个 weekend project 爆火——llama2.c。
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
|
2月前
|
存储 缓存 并行计算
【软件设计师备考 专题 】CPU和存储器的组成、性能和基本工作原理
【软件设计师备考 专题 】CPU和存储器的组成、性能和基本工作原理
56 0
|
10月前
|
Ubuntu 网络虚拟化 Windows
国产化之虚拟ARM64-CPU安装银河麒麟操作系统
国产化之虚拟ARM64-CPU安装银河麒麟操作系统
871 0
|
12月前
|
前端开发 rax
实验一:查看CPU和内存,用机器指令和汇编指令编程
实验一:查看CPU和内存,用机器指令和汇编指令编程
155 0
|
12月前
|
弹性计算 固态存储
阿里云服务器的vCPU是什么意思?虚拟CPU?
阿里云服务器的vCPU是什么意思?虚拟CPU?阿里云服务器vCPU和CPU是什么意思?CPU和vCPU有什么区别?一台云服务器ECS实例的CPU选项由CPU物理核心数和每核线程数决定,CPU是中央处理器,一个CPU可以包含若干个物理核,通过超线程HT(Hyper-Threading)技术可以将一个物理核变成两个逻辑处理核。vCPU(virtual CPU)是ECS实例的虚拟处理核。云服务器吧来详细说下阿里云服务器CPU和vCPU的区别:
1312 0
|
存储
ICS TRIPLEX T8461 创建额外的虚拟或逻辑CPU
ICS TRIPLEX T8461 创建额外的虚拟或逻辑CPU
72 0
ICS TRIPLEX T8461 创建额外的虚拟或逻辑CPU
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十五章:认识RISCV
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十五章:认识RISCV
219 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十四章:硬布线控制器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十四章:硬布线控制器
102 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十三章:微程序控制器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十三章:微程序控制器
118 0
|
5天前
|
Linux
Linux rsyslog占用内存CPU过高解决办法
该文档描述了`rsyslog`占用内存过高的问题及其解决方案。
27 4