16 用verilog/vddl检测stream中的特定字符串
17 用mos管搭出一个二输入与非门。
18 集成电路前段设计流程,写出相关的工具。
19 名词IRQ,BIOS,USB,VHDL,SDR
20 unix 命令cp -r, rm,uname
21 用波形表示D触发器的功能
22 写异步D触发器的verilog module
23 What is PC Chipset?
24 用传输门和反向器搭一个边沿触发器
25 画状态机,接受1,2,5分钱的卖报机,每份报纸5分钱
=================================================
答案
1 什么是Setup 和Holdup时间?
建立时间(Setup Time)和保持时间(Hold time)。建立时间是指在时钟边沿前,数据信号需要保持不变的时间。保持时间是指时钟跳变边沿后数据信号需要保持不变的时间。见图1。
如果不满足建立和保持时间的话,那么DFF将不能正确地采样到数据,将会出现metastability的情况。
如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那么超过量就分别被称为建立时间裕量和保持时间裕量。
图1 建立时间和保持时间示意图
2什么是竞争与冒险现象?怎样判断?如何消除?
在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。
产生毛刺叫冒险。
如果布尔式中有相反的信号则可能产生竞争和冒险现象。
解决方法:一是添加布尔式的消去项,二是在芯片外部加电容。
3 用D触发器实现2倍分频的逻辑电路?
Verilog描述:
module divide2( clk , clk_o, reset);
input clk , reset;
output clk_o;
wire in;
reg out ;
always @ ( posedge clk or posedge reset)
if ( reset)
out <= 0;
else
out <= in;
assign in = ~out;
assign clk_o = out;
endmodule
图形描述:
4 什么是"线与"逻辑,要实现它,在硬件特性上有什么具体要求?
线与逻辑是两个输出信号相连可以实现与的功能。在硬件上,要用oc门来实现,由于不用oc门可能使灌电流过大,而烧坏逻辑门。
同时在输出端口应加一个上拉电阻。
5 什么是同步逻辑和异步逻辑?
同步逻辑是时钟之间有固定的因果关系。
异步逻辑是各时钟之间没有固定的因果关系。
6 请画出微机接口电路中,典型的输入设备与微机接口逻辑示意图(数据接口、控制接口、所存器/缓冲器)。
7 你知道那些常用逻辑电平?TTL与COMS电平可以直接互连吗?
12,5,3.3
TTL和CMOS不可以直接互连,由于TTL是在0.3-3.6V之间,而CMOS则是有在12V的有在5V的。CMOS输出接到TTL是可以直接互连。TTL接到CMOS需要在输出端口加一上拉电阻接到5V或者12V。
8 可编程逻辑器件在现代电子设计中越来越重要,请问:你所知道的可编程逻辑器件有哪些?
PAL,PLD,CPLD,FPGA。
9 试用VHDL或VERILOG、ABLE描述8位D触发器逻辑。
module dff8(clk , reset, d, q);
input clk;
input reset;
input [7:0] d;
output [7:0] q;
reg [7:0] q;
always @ (posedge clk or posedge reset)
if(reset)
q <= 0;
else
q <= d;
endmodule
10 设想你将设计完成一个电子电路方案。请简述用EDA软件(如PROTEL)进行设计(包
括原理图和PCB图)到调试出样机的整个过程。在各环节应注意哪些问题?
电源的稳定上,电容的选取上,以及布局的大小。
11 用逻辑门和cmos电路实现ab+cd
12 用一个二选一mux和一个inv实现异或
13 给了reg的setup,hold时间,求中间组合逻辑的delay范围。
Delay < period - setup - hold
14 如何解决亚稳态
亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
15 用verilog/vhdl写一个fifo控制器
包括空,满,半满信号。
IFO 是先入先出存储器的缩写,FIFO 控制器在数字系统中被大量使用,可以作为数据缓存 使用。时钟同步的FIFO 控制器接口如下图所示,主要接口信号定义如下: RST_N:异步复位信号,当RST_N 为低电平时,FULL 输出‘0’,EMPTY 信号输出‘1’ 电平,FIFO 指针指向0,FIFO 被清空; CLK:时钟信号,输出信号与CLK 信号同步; DATAIN:数据输入信号,8 位总线; RD:读有效信号,高电平有效,当RD 位高时,在时钟信号CLK 的上升沿,DATAOUT 输 出一个8 位的有效数据; WR:写有效信号,当WR 为高电平时,在CLK 的上升沿,从DATAIN 信号向存储器写入 一个8 位的有效数据; DATAOUT:数据输出信号,8 位总线,在CLK 的上升沿,当RD 为高电平时,从FIFO 中 输出一个8 位的数据; FULL:存储器写满标志信号,高电平时表示存储器中的数据已经写满; EMPTY:存储器读空标志信号,高电平时表示存储器中的数据已经被读空了。 要求:用Verilog 写一个8x16 的FIFO,完成先入先出的功能,并且在FIFO读空时输出EMPTY 有效信号,读指针RP 不再移动;FIFO 写满时输出FULL 有效信号,并且即使WR 有效也 不再向存储单元中写入数据(写指针WP 不再移动)。 存储单元使用一个二维数组来建模。注意存储单元的地址在读或者写到最高地址时要能回到 最低值。 写出合适的testbench 来测试所写的Verilog 代码,检验其正确性。 module fifo_mem(data,clk,rstN,wrN,rdN,empty,full); inout [7:0] data; input clk,rstN,wrN,rdN; output empty,full; reg [4:0] _cntr,rd_cntr; wire [3:0] add; ram16X8 ram(.data(data),.addr(addr),.wrN(wrN),.oe(wrN)); always @(posedge clk or negedge rstN) if(!rstN) wr_cntr<=0; else if (!wrN) wr_cntr<=wr_cntr+1; always @ (posedge clk or negedge rstN) if(!rstN) rd_cntr<=0; else if(!rdN) rd_cntr<=rd_cntr+1; assign addr=wrN?rd_cntr [3:0]: wr_cntr [3:0]; assign empty=(wr_cntr [3:0] == rd_cntr [3:0])&&!(wr_cntr[4]^rd_cntr[4]); assign full=(wr_cntr [3:0] ==rd_cntr [3:0])&&(wr_cntr[4]^rd_cntr[4]); endmodule
16 用verilog/vddl检测stream中的特定字符串
分状态用状态机写。
17 用mos管搭出一个二输入与非门。
18 集成电路前段设计流程,写出相关的工具。
19 名词IRQ,BIOS,USB,VHDL,SDR
IRQ: Interrupt ReQuest
BIOS: Basic Input Output System
USB: Universal Serial Bus
VHDL: VHIC Hardware Description Language
SDR: Single Data Rate
20 unix 命令cp -r, rm,uname
21 用波形表示D触发器的功能
22 写异步D触发器的verilog module
module dff8(clk , reset, d, q);
input clk;
input reset;
input d;
output q;
reg q;
always @ (posedge clk or posedge reset)
if(reset)
q <= 0;
else
q <= d;
endmodule
23 What is PC Chipset?
芯片组(Chipset)是主板的核心组成部分,按照在主板上的排列位置的不同,通常分为北桥芯片和南桥芯片。北桥芯片提供对CPU的类型和主频、内存的类型和最大容量、ISA/PCI/AGP插槽、ECC纠错等支持。南桥芯片则提供对KBC(键盘控制器)、RTC(实时时钟控制器)、USB(通用串行总线)、Ultra DMA/33(66)EIDE数据传输方式和ACPI(高级能源管理)等的支持。其中北桥芯片起着主导性的作用,也称为主桥(Host Bridge)。
除了最通用的南北桥结构外,目前芯片组正向更高级的加速集线架构发展,Intel的8xx系列芯片组就是这类芯片组的代表,它将一些子系统如IDE接口、音效、MODEM和USB直接接入主芯片,能够提供比PCI总线宽一倍的带宽,达到了266MB/s。
24 用传输门和反向器搭一个边沿触发器
25 画状态机,接受1,2,5分钱的卖报机,每份报纸5分钱
第一,偶数倍分频:如进行N倍偶数分频,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。
第二,奇数倍分频:有两种实现方法:
首先,完全可以通过计数器来实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。即是在计数值在邻近的1和2进行了两次翻转。这样实现的三分频占空比为1/3或者2/3。
如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。这种方法可以实现任意的奇数分频。归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。
另外一种方法:对进行奇数倍n分频时钟,首先进行n/2分频(带小数,即等于(n-1)/2+0.5),然后再进行二分频得到。得到占空比为50%的奇数倍分频。下面讲讲进行小数分频的设计方法
第三,小数分频:首先讲讲如何进行n+0.5分频,这种分频需要对输入时钟进行操作。基本的设计思想:对于进行n+0.5分频,首先进行模n的计数,在计数到n-1时,输出时钟赋为‘1’,回到计数0时,又赋为0,因此,可以知道,当计数值为n-1时,输出时钟才为1,因此,只要保持计数值n-1为半个输入时钟周期,即实现了n+0.5分频时钟,因此保持n-1为半个时钟周期即是一个难点。从中可以发现,因为计数器是通过时钟上升沿计数,因此可以在计数为n-1时对计数触发时钟进行翻转,那么时钟的下降沿变成了上升沿。即在计数值为n-1期间的时钟下降沿变成了上升沿,则计数值n-1只保持了半个时钟周期,由于时钟翻转下降沿变成上升沿,因此计数值变为0。因此,每产生一个n+0.5分频时钟的周期,触发时钟都是要翻转一次.
举例:用Verilog语言写的三分频电路
方法一:
//上升沿触发的分频设计
module three(clkin, clkout);
input clkin;//定义输入端口
output clkout;//定义输出端?
reg [1:0] step1, step;
always @(posedge clkin)
begin
case (step)
2'b00: step<=2'b01;
2'b01: step<=2'b10;
2'b10: step<=2'b00;
default :step<=2'b00;
endcase
end
always @(negedge clkin)
begin
case (step1)
2'b00: step1<=2'b01;
2'b01: step1<=2'b10;
2'b10: step1<=2'b00;
default :step1<=2'b00;
endcase
end
assign clkout=~(step[1]|step1[1]);
endmodule
方法二:
// 如果duty cycle =50%, 可以第一个周期
第二个周期输出原先clock,第三个周期输出低
这样可以实现三分频,
输出是占空比1:1的三分频.module three(clk,throut) ;
input clk ;
output throut;
reg q1,q2,d,throut;
always @(posedge clk)
if(!d)
q1=1'b1;
else
q1=~q1 ;
always @(negedge clk)
if(!d)
q2=1'b1;
else
q2=~q2 ;
always @(q1 or q2)
d=q1&q2 ;
always @(posedge d)
throut=~throut;
endmodule
用Verilog语言写五分频电路,占空比为50%:module div_5 ( clkin,rst,clkout );
input clkin,rst;
output clkout;
reg [2:0] step1, step2;
always @(posedge clkin )
if(!rst)
step1<=3'b000;
else
begin
case (step1)
3'b000: step1<=3'b001;
3'b001: step1<=3'b011;
3'b011: step1<=3'b100;
3'b100: step1<=3'b010;
3'b010: step1<=3'b000;
default:step1<=3'b000;
endcase
end
always @(negedge clkin )
if(!rst)
step2<=3'b000;
else
begincase (step2)
3'b000: step2<=3'b001;
3'b001: step2<=3'b011;
3'b011: step2<=3'b100;
3'b100: step2<=3'b010;
3'b010: step2<=3'b000;
default:step2<=3'b000;
endcase
end
assign clkout=step1[0]|step2[0];
endmodule