为了能够在做题目的过程中学习到需要的知识,对每道题知识参考或者知识详情都做了详细的说明。方便后续复习。欢迎对文中的解答批评指正。
文章目录
- 1. [简答题] 某RTL design中使用了如下256 x16 memory:
- 2. [简答题] s(t)为fsk调制信号s(t)=x(n)sin(w1t)+x'(n)sin(w2t), {w1>w2},x(n)={1,011,01}.带通滤波的通带为w1±a,0<(w1-w2)/2 图3-1给出包络检波的解调框图,请画出b,c,d各点的波形,a点波形图3-2如下。
- 3. [简答题]动态功耗和静态功耗分别指的是哪些?可以通过什么方法降低? (10分)
- 4. [简答题] (15分)
- 5. [简答题]正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等,字符集是指在单个位置上能匹配的各种模式字符的集合,部分字符集的简写形式如下图所示。
- 6. [简答题]针对近年来参与的一个项目进行说明
- 7. [简答题] Verilog开发。
- 8. [简答题]用C语言统计100~1000里面共有多少个素数,并且把所有素数打印出来。素数又称质数。所谓素数是指除了1和它本身以外,不能被任意整数整除的数. (15分)
题目原文[数字IC打工人],感谢作者的收集汇总。
1. [简答题] 某RTL design中使用了如下256 x16 memory:

该memory有两组读写接口,每组读写接口均可独立进行write/read操作,其timing示例如下,write/read均在2个cycle后完成。
没有问题,写不了
2. [简答题] s(t)为fsk调制信号s(t)=x(n)sin(w1t)+x’(n)sin(w2t), {w1>w2},x(n)={1,011,01}.带通滤波的通带为w1±a,0<(w1-w2)/2 图3-1给出包络检波的解调框图,请画出b,c,d各点的波形,a点波形图3-2如下。


3. [简答题]动态功耗和静态功耗分别指的是哪些?可以通过什么方法降低? (10分)
动态功耗是由翻转电流和短路电流引起的功耗。翻转功耗是电路在开关过程中对输出节点的负载电容充放电所消耗的功耗。短路功耗是此时翻转过程中NMOS管和PMOS管同时导通产生短路电流引起的功耗。
静态功耗由漏电流引起的功耗。其中漏电流主要由PN结反向电流、源极和漏极之间的亚阈值漏电流、栅极漏电流和栅极和衬底之间的隧道漏电流组成。
动态功耗可以通过多电压域、预计算、门控时钟等低功耗技术来降低。静态功耗通过多阈值工艺方法、电源门控和体偏置方法来降低。
4. [简答题] (15分)
1)请解释什么是input delay,什么是output delay?可以通过作图等方式来解释。
2)有如下图所示电路示意图,已知clock-2-Q的delay为1.5ns,时钟周期T=12ns,F0与F1之间的skew为1ns,setup time为1ns,hold time为0.5ns,为保证电路不会出现setup time violation和hold time violation的情况,求tc0_max, tc0_min, tc1_max,tc1_min
3)什么是OCV,为什么要使用OCV,并在所示的电路示意图中指出哪些路径受到OCV的影响?

1)
input delay:时钟触发后信号信号到达输入端口前经过的延迟。
output delay:输出端口输出信号后到下一个触发器采样前信号的传输延迟。
2)
时钟偏斜=目标寄存器时钟到达时间-源寄存器时钟到达时间
但是这个图有两条路径,不知道这个偏斜怎么理解,按图的意思也可能是 F0 的时钟比 F1 玩到 1ns。
这样的话,F0.clk->F1.D路径的偏斜就是 -1ns。F1.clk->F0.D路径的偏斜就是 1ns。
F0.clk->F1.D路径:
- 建立关系:tcq + tc0 + tsetup < tclk + tskew,1.5 + tc0 + 1 < 12 + (-1) ,tc0 < 8.5ns
- 保持关系:tcq + tc0 > thold + tskew,1.5 + tc0 > 0.5 + (-1),tc0 > -2ns。
F1.clk->F0.D路径:
- 建立关系:tcq + tc1 + tsetup < tclk + tskew,1.5 + tc1 + 1 < 12 + (1) ,tc0 < 11.5ns
- 保持关系:tcq + tc1 > thold + tskew,1.5 + tc1 > 0.5 + (1),tc0 > 0ns。
3)
片上变化(on chip variation,OCV)概念学习
片上变化(On-Chip Variation,OCV):对同一 network 的不同段进行的这种差异处理,可以覆盖到同一芯片不同部分上的任何变化情况。这种差异处理被称为片上变化。
clk->F0.clk 和 clk->F1.clk 两条时钟路径会受影响。
5. [简答题]正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等,字符集是指在单个位置上能匹配的各种模式字符的集合,部分字符集的简写形式如下图所示。

请问:“\W*\sinput\swire\s*([\d+:\d+])\s(\w+)\s*”可以匹配到下边哪个或哪些选项? (5分)
- A. input wire [3:0] num1
- B. // input wire num2
- [] C. // input wire [WIDTH-1:0] num3
- [] D. Input wire [10:0] num4
- [] E. input wire [BIT:0] num5
\W*【尽量多个非单词字符】\s*【尽量多个空白字符】input【input字符串】\s*【尽量多个空白字符】wire【wire字符串】\s*【尽量多个空白字符】([\d+:\d+)【:两边尽量多数字,尽量多个这样的组合】\s(\w+)【尽量多个单词字符】\s*
整理:【非单词字符】【空白字符】input【空白字符】wire【空白字符】【:两边尽量多数字,尽量多个这样的组合】【空白字符】【单词字符】
A、B可以,C WIDTH不符合、D Input 不符合、E BIT不符合。
在线运行工具:正则表达式在线测试
6. [简答题]针对近年来参与的一个项目进行说明
a.说明项目整体情况,及你所负责的内容。(可附框图) (2分)
b.开发过程中的最大挑战是什么? (3分)
c.当时是怎么处理这个挑战?如果重新来过,你可能会怎么处理? (5分) (10分)
STAR法则
7. [简答题] Verilog开发。
当A、B两组的信号请求访问某个模块时,为了保证正确的访问,需要对这些信号进行仲裁。请用Verilog实现一个仲裁器,对两组请求信号进行仲裁,要求:
协议如图所示,请求方发送req(request)信号1表示有请求给仲裁器,仲裁器响应grant信号为1表示请求成功:

通过参数定义在冲突情形下,响应A/B的比例
(举例,一段时间内,有若干次A请求和若干次B请求,其中A&B发生冲突的有N次,这N次中先响应A 3次,后响应B 1次,循环反复。举例中的3和1可配置。);
添加必要的注释,增加代码可读性。(15分)
这里个人对题目的理解有点不够透彻。结果仅供参考。
- 当需要仲裁时,会在响应完其他优先总线后响应另一总线?或者跳过另一个总线的请求?
- 注意响应信号要在请求同一周期发出。这就导致需要组合逻辑输出,一般有这样搞的吗?
不太喜欢这个题目,写一下思路,未验证:
`timescale 1ns/1ps
module arbiter #(
parameter P_A = 3,
parameter P_B = 1
)(
//---system interface ---
input I_sys_clk ,
input I_reset_n ,
//--- user interface ---
input I_req_a ,
output reg O_grantq_a,
input I_req_b ,
output reg O_grantq_b
);
//--- internal signal definitions ---
//=== parameter definitions ===
localparam P_WIDTH = $clog2(P_A+P_B);
//=== reg definitions ===
reg [P_WIDTH-1 : 0] R_arbiter_cnt;
reg R_reg_conflict ;
reg R1_reg_conflict;
//=== wire definitions ===
wire W_reg_conflict;
//--- Main body of code ---
assign W_reg_conflict = I_req_a && I_req_b;
always @(posedge I_sys_clk or negedge I_reset_n)
begin
if(~I_reset_n)
begin
R_arbiter_cnt <= 'd0;
end
else
begin
if (R_arbiter_cnt == P_A + P_B - 1)
begin
R_arbiter_cnt <= 'd0;
end
else if (W_reg_conflict)
begin
R_arbiter_cnt <= R_arbiter_cnt + 'd1;
end
end
end
always @(posedge I_sys_clk or negedge I_reset_n)
begin
if(~I_reset_n)
begin
R_reg_conflict <= 1'b0;
R1_reg_conflict <= 1'b0;
end
else
begin
R_reg_conflict <= W_reg_conflict;
R1_reg_conflict <= R_reg_conflict;
end
end
always @(*)
begin
if(~I_reset_n)
begin
O_grantq_a = 1'b0;
O_grantq_b = 1'b0;
end
else
begin
if (|{R1_reg_conflict, R_reg_conflict, W_reg_conflict})
begin
if (R_arbiter_cnt == 0)
begin
O_grantq_a = R_reg_conflict;
O_grantq_b = R1_reg_conflict;
end
else
begin
O_grantq_a = R1_reg_conflict;
O_grantq_b = R_reg_conflict;
end
end
else
begin
O_grantq_a = I_req_a;
O_grantq_b = I_req_b;
end
end
end
endmodule
8. [简答题]用C语言统计100~1000里面共有多少个素数,并且把所有素数打印出来。素数又称质数。所谓素数是指除了1和它本身以外,不能被任意整数整除的数. (15分)
暴力搜索
#include <stdio.h>
int main()
{
int i,j;
for(i = 100; i <= 1000; i ++)
{
for(j = 2; j < i; j ++)
{
// 如果有其他因数,就跳过这个数。
if(i % j == 0)
{
break;
}
}
// 如果搜索到本身还没有其他因数,就输出这个数。
if(i==j) printf("%d \n", i);
}
return 0;
}
2186

被折叠的 条评论
为什么被折叠?



