admin 管理员组

文章数量: 887021


2023年12月24日发(作者:苹果请启用javascript)

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控制器

包括空,满,半满信号。

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分钱library ieee;

use _logic_;

use _logic_;

entity pdiv is

port(clk:in std_logic;

y : out std_logic);

end pdiv;

architecture bh of pdiv is

signal loadn,loadm,a,b :std_logic;

signal qn,qm: std_logic_vector(2 downto 0);

begin

process (clk,loadn,loadm)

begin

if loadn ='1' then

qn<="010";

elsif clk'event and clk='1' then

qn<=qn-1;

end if;

if loadm='1' then

qm<="010";

elsif clk'event and clk='0' then

qm<=qm-1;

end if;

end process;

loadn<=qn(2);

loadm<=qm(2);

a<=qn(1);

b<=qm(1);

y<=a nor b;

end bh;

汉王笔试

下面是一些基本的数字电路知识问题,请简要回答之。

a) 什么是Setup 和Holdup时间?

b) 什么是竞争与冒险现象?怎样判断?如何消除?

c) 请画出用D触发器实现2倍分频的逻辑电路?

d) 什么是"线与"逻辑,要实现它,在硬件特性上有什么具体要求?

e) 什么是同步逻辑和异步逻辑?

f) 请画出微机接口电路中,典型的输入设备与微机接口逻辑示意图(数据接口、控制接口、所存器/缓冲器)。

g) 你知道那些常用逻辑电平?TTL与COMS电平可以直接互连吗?

2、 可编程逻辑器件在现代电子设计中越来越重要,请问:

a) 你所知道的可编程逻辑器件有哪些?

b) 试用VHDL或VERILOG、ABLE描述8位D触发器逻辑。

3、 设想你将设计完成一个电子电路方案。请简述用EDA软件(如PROTEL)进行设计(包

括原理图和PCB图)到调试出样机的整个过程。在各环节应注意哪些问题?

飞利浦-大唐笔试归来

1,用逻辑们和cmos电路实现ab+cd

2. 用一个二选一mux和一个inv实现异或

3. 给了reg的setup,hold时间,求中间组合逻辑的delay范围。

Setup/hold time 是测试芯片对输入信号和时钟信号之间的时间要求。建立时间是指触发器的时钟信号上升沿到来以前,数据稳定不变的时间。输入信号应提前时钟上升沿(如上升沿有效)T时间到达芯片,这个T就是建立时间-Setup time.如不满足setup time,这个数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿,数据才能被打入触发器。保持时间是指触发器的时钟信号上升沿到来以后,数据稳定不变的时间。时hold time不够,数据同样不能被打入触发器。

4. 如何解决亚稳态

5. 用verilog/vhdl写一个fifo控制器

6. 用verilog/vddl检测stream中的特定字符串

信威dsp软件面试题~

)DSP和通用处理器在结构上有什么不同,请简要画出你熟悉

的一种DSP结构图

2)说说定点DSP和浮点DSP的定义(或者说出他们的区别)

3)说说你对循环寻址和位反序寻址的理解

4)请写出【-8,7】的二进制补码,和二进制偏置码。

用Q15表示出0.5和-0.5

扬智电子笔试

第一题:用mos管搭出一个二输入与非门。

第二题:集成电路前段设计流程,写出相关的工具。

第三题:名词IRQ,BIOS,USB,VHDL,SDR

第四题:unix 命令cp -r, rm,uname

第五题:用波形表示D触发器的功能

第六题:写异步D触发器的verilog module

第七题:What is PC Chipset?

第八题:用传输门和倒向器搭一个边沿触发器

第九题:画状态机,接受1,2,5分钱的卖报机,每份报纸5分钱。

华为面题

(硬件)

全都是几本模电数电信号单片机题目

1.用与非门等设计全加法器

2.给出两个门电路让你分析异同

3.名词:sram,ssram,sdram

4.信号与系统:在时域与频域关系

5.信号与系统:和4题差不多

6.晶体振荡器,好像是给出振荡频率让你求周期(应该是单片机的,12分之一周期..

7.串行通信与同步通信异同,特点,比较

232c高电平脉冲对应的TTL逻辑是?(负逻辑?)

9.延时问题,判错

10.史密斯特电路,求回差电压

是什么,什么参数(压控振荡器?)

12. 用D触发器做个二分颦的电路.又问什么是状态图

13. 什么耐奎斯特定律,怎么由模拟信号转为数字信号

14. 用D触发器做个4进制的计数

15.那种排序方法最快?

一、 研发(软件)

用C语言写一个递归算法求N!;

给一个C的函数,关于字符串和数组,找出错误;

防火墙是怎么实现的?

你对哪方面编程熟悉?

新太硬件面题

接着就是专业题目啦

(1)d触发器和d锁存器的区别

(2)有源滤波器和无源滤波器的原理及区别

(3)sram,falsh memory,及dram的区别?

(4)iir,fir滤波器的异同

(5)冒泡排序的原理

(6)操作系统的功能

(7)学过的计算机语言及开发的系统

(8)拉氏变换和傅立叶变换的表达式及联系。

如果电路中一定要使用组合逻辑,如何提高电路的可靠性

2.你认为ASIC成功的关键是什么?

一开始还以为会让自我介绍一下(以前所有的面试都如此开场),没想到刚一坐下来就是技术问题,有点蒙。大致如下:

1、同步异步电路的区别(虽然经常提到这个概念,可是真细致的问起来,感觉不好说)

2、异步电路设计要注意哪些问题(同上)

3、怎么提高设计频率

4、数字锁相环的概念和设计要点(这个我前两天拿到资料看了一下,但没仔细看,结果答的比较含糊,唉)

5、用运放画一个放大器(汗,早忘了)

就记得这些了,接着给欧一份考卷,我答得还可以,能想起下面这些:

1、传输线固有输入阻抗和传输线长度和宽度的关系?

2、漂移发生在多大的频率上?(好像也是锁相环方面的概念,记不太清了)

3、什么狼、羊、仓的逻辑题,很容易

4、ttl高电平得最低输入电压、低点平的最高输入电压是多少?

5、冒险的概念

6、几个数字电路让你分析,不难,没法画,就不说了。

7、512k*8bit的ram有几根地址线,数据线?(今天面试最容易的题)

8、什么SDH和PDH的区别?(因为听都没听说过,也不知道记得对不对,知道的人纠正一下哈)

9、pci是同步还是异步总线?

总之这块还是容易的,但是考得范围比较广,欢迎补充,嗬嗬

大概的印象,可能有点出入,大家参考,最好大牛能给出答案,hoho。

1. setup time 和 hold time 不满足情况下应该如何解决?

2. 什么叫做亚稳态,如何解决?

3. Verilog中 => 和 = 有什么区别?

4. 画一个D触发器的原理图(门级),并且用verilog gate level表示出来;

5. 用最少的Mos管画出一个与非门;

6. 写一段finite state machine(主要考察coding style);如果触发器的setup time/hold time不满足,这个数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿到来时,数据才能被打入触发器。

在同步系统中,如果触发器的setup time/hold time不满足,就可能产生亚稳态(Metastability),导致采样错误。此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端毛刺、振荡、固定的某一电压值,而不是等于数据输入端D的值。这段之间成为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是究竟是0还是1,这是随机的,与输入没有必然的关系。

只要系统中有异步元件,亚稳态就是无法避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使系统对产生的错误不敏感。前者需要同步来实现,而后者根据不同的设计应用有不同的处理办法

题目是都用英文写的,我用汉字来表达

1, a为输入端,b为输出端,如果a连续输入为1101则b输出为1,否则为0

例如a:

b:

请画出state machine

2, 请用RTL描述上题state machine

3,library IEEE;

use _LOGIC_;

use _LOGIC_;

use _LOGIC_;

entity check1101 is

Port ( a : in std_logic;

clk : in std_logic;

b : out std_logic);

end check1101;

architecture Behavioral of check1101 is

signal p : std_logic_vector(0 to 3);

begin

serial2parallel: process(clk)

begin

if clk'event and clk='1' then

p<=a&p(0 to 2);

end if;

end process;

check: process(clk,p)

begin

if clk'event and clk='1' then

if p = "1101" then

b<= '1';

else

b<= '0';

end if;

end if;

end process;

end Behavioral; 我的一个同事说的。

你的p其实就是一个状态,应该是设两个状态就足够了:1101和OTHERS

这只是一个典型的设计题目,而且用状态机做并没有使设计复杂化

你下面的设计会实现有两个延时,不过我相信出题的人不会在意这个的。

还有就是,状态机设计一般都有reset的,你要加上这个端口才比较好,当然不加也不算不完整吧

此题scholes描述的,只有一个延时。修改如下:

library ieee;

use _logic_;

use _LOGIC_;

use _LOGIC_;

entity test is

port ( rst : in std_logic;

clk : in std_logic;

a : in std_logic;

b : out std_logic

);

end test;

architecture test of test is

signal p: std_logic_vector(3 downto 0 );

begin

Start:process (rst, clk, p, a)

begin -- process

if rst = '1' then

if clk'event and clk = '1' then

p<=p(2 downto 0)&a;

end if;

else

p<="0000";

end if;

end process;

Start1:process (rst, clk, p)

begin -- process

if rst = '1' then

if clk'event and clk = '1' then

if p = "1101" then

b<='1';

else

b<='0';

end if;

end if;

else

b<='0';

end if;

end process;

end test;

本题考察利用有限状态机进行时序逻辑的设计

下面用verilog进行描述:(有限状态机提供6个状态)

module sequence_detect(in,out,clk,rst,state);

output out;

output[2:0]state;

input clk;

input rst;

input in;

reg[2:0]state;

wire out;

parameter IDLE='d0,

A='d1,

B='d2,

C='d3,

D='d4,

E='d5;

assign out=((state==D)&&(in==1))?1:0;

always @(posedge clk)

begin

if(!rst)

begin

state<=IDLE;

end

else

case(state)

IDLE:if(in==1) // the first code is right, storing the state A //

begin

state<=A;

end

A:if(in==1) // the second code is right, storing the state B //

begin

state<=B;

end

else

begin

state<=IDLE;

end

B:if(in==0) // the third code is right, storing the state C //

begin

state<=C;

end

else

begin

state<=E;

end

C:if(in==1) // the fourth code is right, storing the state D //

begin

state<=D;

// out<=1;

end

else

begin

state<=IDLE;

// out<=0;

end

D:if(in==1) // connecting the front inputted sequence,again introducing one,storing state B //

begin

state<=B;

end

else

begin

state<=IDLE;

end

E:if(in==0)

begin

state<=C;

end

else

begin

state<=B;

end

default:state=IDLE;

endcase

end

endmodule

library ieee;

use _logic_;

use _LOGIC_;

use _LOGIC_;

entity test is

port (

rst : in std_logic;

clk : in std_logic;

a : in std_logic;

b : out std_logic

);

end test;

architecture test of test is

signal p: std_logic_vector(2 downto 0 );

begin

Start:process (rst, clk)

begin

if rst = '1' then

p<="000";

if clk'event and clk = '1' then

p<=p(1 downto 0)&a;

end if;

end if;

end process;

Start1:process (rst, clk)

begin -- process

if rst = '1' then

b<='0';

if clk'event and clk = '1' then

if p = "110" and a='1' then

b<='1';

else

b<='0';

end if;

end if;

end if;

end process;

end test;

有两段代码

1。proceee(a,b,c,sel,y)

begin

if (sel) y = a+b;

elsey=a+c;end

2.y = sel ? a+b : a+c;

面试官说第一中表达方法是先选后加,所以电路实现是一个选择器和一个加法器

第二种方法是先加后选,用到两个加法器和一个选择器,所以他说第一种表达方式要好一些。

查了一下书,发现面试官说的并不全对,一般来说,综合工具会自动的优化,一般只会综合出一个加法器和一个选择器

先选后加是加法器共用,节省面积

先加后选是用面积换时间,电路的工作速度更快些。为了实现逻辑(A XOR B)OR (C AND D),请选用以下逻辑中的一种,并说明为什么?

1)INV 2)AND 3)OR 4)NAND 5)NOR 6)XOR

我没有做出来,请大家帮忙看看

我想了一下,用与非是肯定可以实现的

1。与非门的两个输入连在一起就成了非门

2。或门可以用与非和非门搭建

或非其实也可以

1。或非的两个输入PAD连在一起成非门

2。与门可以用或非门和非门搭建

奇数分频(6或者3)

module s1

(// {{ALTERA_ARGS_BEGIN}} DO NOT REMOVE THIS LINE!

clkin, clkout, s1, s2

// {{ALTERA_ARGS_END}} DO NOT REMOVE THIS LINE!

);// Port Declaration

// {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!

input clkin;

output clkout, s1, s2;

// {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!

wire s1,s2;

reg [1:0] step1, step2;

always @(posedge 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

always @(negedge clkin)

begin

case (step2)

2'b00: step2<=2'b01;

2'b01: step2<=2'b10;

2'b10: step2<=2'b00;

default :step2<=2'b00;

endcase

end

assign clkout=step1[1]|step2[1];

assign s1=step1[1];

assign s2=step2[1];

endmodule

testbench:

`timescale 1ns/1ns

module s1_tb;

reg clk_in;

wire clk_out,s1, s2;

always #50 clk_in=~clk_in;

initial

begin

clk_in=0;

#1000 $stop;

end

s1 s10(.clkin(clk_in), .clkout(clk_out), .s1(s1), .s2(s2));

endmodule

独立晶振

一个10m一个15m ,10m向15m的传输数据问怎么实现 我说小数分频成10m内部时钟,再采样 求正解

数据量少用握手信号,数据量多用FIFO,如果有很高的时钟资源可以考虑用高时钟采样,但是不是很好的方法,分频成5M是肯定不行的,分成相同频率也是异步信号

和holdup时间,区别.

2.多时域设计中,如何处理信号跨时域

与register的区别,为什么现在多用register.行为级描述中latch如何产生的

NG NONBLOCKING 赋值的区别

与 MEELEY状态机的特征

设计中同步复位与 异步复位的区别

7.实现N位Johnson Counter,N=

8.用FSM实现101101的序列检测模块

2.多时域设计中,如何处理信号跨时域:

情况比较多,如果简单回答的话就是:跨时域的信号要经过同步器同步,防止亚稳态传播。例如:时钟域1中的一个信号,要送到时钟域2,那么在这个信号送到时钟域2之前,要先经过时钟域2的同步器同步后,才能进入时钟域2。这个同步器就是两级d触发器,其时钟为时钟域2的时钟。这样做是怕时钟域1中的这个信号,可能不满足时钟域2中触发器的建立保持时间,而产生亚稳态,因为它们之间没有必然关系,是异步的。这样做只能防止亚稳态传播,但不能保证采进来的数据的正确性。所以通常只同步很少位数的信号。比如控制信号,或地址。当同步的是地址时,一般该地址应采用格雷码,因为格雷码每次只变一位,相当于每次只有一个同步器在起作用,这样可以降低出错概率,象异步FIFO的设计中,比较读写地址的大小时,就是用这种方法。

如果两个时钟域之间传送大量的数据,可以用异步FIFO来解决问题。

设计中同步复位与 异步复位的区别

如果光说概念的话:同步复位在时钟沿采复位信号,完成复位动作。

异步复位不管时钟,只要复位信号满足条件,就完成复位动作。

象芯片的上电复位就是异步复位,因为这时时钟振荡器不一定起振了,可能还没有时钟脉冲。异步复位很容易受到复位端信号毛刺的影响,比如复位端信号由组合逻辑组成,那组合逻辑输出产生的冒险,

就会使触发器错误的复位。

NG NONBLOCKING 赋值的区别

这个问题可参考的资料很多,讲的都很透彻,可以找一下。基本用法就是常说的“组合逻辑用BLOCKING,

时序逻辑用NONBLOCKING”。

与register的区别,为什么现在多用register.行为级描述中latch如何产生的

区别不多说。为什么避免使用latch,因为设计中用latch会使设计后期的静态时序分析变的困难(必须用的地方当然另当别论)。

行为级描述中latch产生的原因:多由于构造组合逻辑电路时,使用if或case语句,没有把所有的条件给足,导致没有提到的条件,其输出未知。或者是每个条件分支中,没有给出所有输出的值,这就会产生latch。所以构造组合逻辑电路时,其always语句中的敏感信号必须包括所有的输入端,每个条件分支必须把所有的输出端的值都给出来。

和holdup时间,区别.

建立时间:触发器在时钟沿来到前,其数据输入端的数据必须保持不变的时间

保持时间:触发器在时钟沿来到后,其数据输入端的数据必须保持不变的时间

1.模拟电路设计

基础知识(笔试时候容易遇到的题目)

1.最基本的如三极管曲线特性(太低极了点)

2.基本放大电路,种类,优缺点,特别是广泛采用差分结构的原因

3.反馈之类,如:负反馈的优点(带宽变大)

4.频率响应,如:怎么才算是稳定的,如何改变频响曲线的几个方法

5.锁相环电路组成,振荡器(比如用D触发器如何搭)

6.A/D电路组成,工作原理

如果公司做高频电子的,可能还要RF知识,调频,鉴频鉴相之类,不一一列举

太底层的MOS管物理特性感觉一般不大会作为笔试面试题,因为全是微电子物理,公

式推导太罗索,除非面试出题的是个老学究

ic设计的话需要熟悉的软件adence, Synopsys, Advant,UNIX当然也要大概会操作

实际工作所需要的一些技术知识(面试容易问到)

如电路的低功耗,稳定,高速如何做到,调运放,布版图注意的地方等等,一般会针

对简历上你所写做过的东西具体问,肯定会问得很细(所以别把什么都写上,精通之类的

词也别用太多了),这个东西各个人就不一样了,不好说什么了。

2.数字电路设计

当然必问Verilog/VHDL,如设计计数器

逻辑方面数字电路的卡诺图化简,时序(同步异步差异),触发器有几种(区别,优

点),全加器等等

比如:设计一个自动售货机系统,卖soda水的,只能投进三种硬币,要正确的找回钱数

1.画出fsm(有限状态机)

2.用verilog编程,语法要符合fpga设计的要求

系统方面:如果简历上还说做过cpu之类,就会问到诸如cpu如何 工作,流水线之类

的问题

3.单片机、DSP、FPGA、嵌入式方面(从没碰过,就大概知道几个名字胡扯几句,欢迎拍

砖,也欢迎牛人帮忙补充)

如单片机中断几个/类型,编中断程序注意什么问题

DSP的结构(冯.诺伊曼结构吗?)

嵌入式处理器类型(如ARM),操作系统种类(Vxworks,ucos,winCE,linux),操作系统方

面偏CS方向了,在CS篇里面讲了

4.信号系统基础

拉氏变换与Z变换公式等类似东西,随便翻翻书把

如.h(n)=-a*h(n-1)+b*δ(n) a.求h(n)的z变换 b.问该系统是否为稳定系统

c.写出F IR数字滤波器的差分方程

以往各种笔试题举例

利用4选1实现F(x,y,z)=xz+yz'

用mos管搭出一个二输入与非门。 用传输门和倒向器搭一个边沿触发器

用运算放大器组成一个10倍的放大器

微波电路的匹配电阻。

名词解释,无聊的外文缩写罢了,比如PCI、ECC、DDR、interrupt、pipeline

IRQ,BIOS,USB,VHDL,VLSI VCO(压控振荡器) RAM (动态随机存储器),FIR IIR DFT(离散

傅立叶变换)

或者是中文的,比如 a量化误差 b.直方图 c.白平衡

共同的注意点1.一般情况下,面试官主要根据你的简历提问,所以一定要对自己负责,把简历上的东

西搞明白;2.个别招聘针对性特别强,就招目前他们确的方向的人,这种情况下,就要投其所好,

尽量介绍其所关心的东西。

3.其实技术面试并不难,但是由于很多东西都忘掉了,才觉得有些难。所以最好在面试

前把该看的书看看。

4.虽然说技术面试是实力的较量与体现,但是不可否认,由于不用面试官/公司所专领域

及爱好不同,也有面试也有很大的偶然性,需要冷静对待。不能因为被拒,就否认自己

或责骂公司。

5.面试时要take it easy,对越是自己钟情的公司越要这样。

1. 集成电路设计前端流程及工具。

2。FPGA和ASIC的概念,他们的区别

3。LATCH和DFF的概念和区别

4。用DFF实现二分频。

5。用VERILOG或VHDL写一段代码,实现消除一个glitch

6。给一个表达式f=xxxx+xxxx+xxxxx+xxxx用最少数量的与非门实现(实际上就是化简)

7。用VERILOG或VHDL写一段代码,实现10进制计数器。

8。给出一个门级的图,又给了各个门的传输延时,问关键路径是什么,还问给出输入,使得输出依赖于关键路径。

9。A,B,C,D,E进行投票,多数服从少数,输出是F(也就是如果A,B,C,D,E中1的个数比0多,那么F输出为1,否则F为0),用与非门实现,输入数目没有限1. 可参考各EDA厂商的开发工具

2. FPGA与ASIC的可参阅各种EDA相关书籍。

3. LATC是H锁存器,DFF是触发器,其电路形式完全不同。

4. always @(posedge clk)

if (reset) begin

sel <= 1;

clk1 <= 1;

clk2 <= 1;

end

else begin

sel <= ~sel;

if (sel)

clk1 <= ~clk1;

else

clk2 <= ~clk2;

end

5. glitch主要发生在组合逻辑电路输出,可以加DFF输出稳定信号

6,7,8,9: 。。。制。

2. 负数与正数相乘的问题

3. 1010(-6)*0010(2)

用补码相乘时应该进行相应的符号扩展,比如上面是4bit相乘,结果应该为8bit。这样符号扩展后分别为11111010和00000010,然后再用这两个数直接相乘,结果为111110100,取其低8位11110100,作为-6*2的结果。这也是个补码形式,再判断一下高位恢复为原码,得到结果。

以前讨论过相关问题,可以翻出来看看

检测信号的上升沿LIBRARY ieee;

USE _logic_;

ENTITY sync IS

PORT(clk: IN STD_LOGIC;

rst: IN STD_LOGIC;

sync_in: IN STD_LOGIC;

sync_out: OUT STD_LOGIC);

END sync;

ARCHITECTURE arch OF sync IS

SIGNAL sync_int1, sync_int2: STD_LOGIC;

BEGIN

---------------------------------------------------------

PROCESS(clk, rst, sync_in)

BEGIN

IF rst='0' THEN

sync_out<='0';

ELSIF rising_edge(clk) THEN

sync_int1<=sync_in;

sync_int2<=sync_int1;

IF (sync_int1='1' AND sync_int2='0') THEN

sync_out<='1';

ELSE

sync_out<='0';

END IF;

END IF;

END PROCESS;

END arch;

并入串出?

library IEEE;

use _LOGIC_;

use _LOGIC_;

use _LOGIC_;

entity piso is

port( datain :in std_logic_vector(39 downto 0);

clk : in std_logic;

nLoad:in std_logic;

data_out: out std_logic);

end piso;

architecture Behavioral of piso is

signal q: std_logic_vector(39 downto 0);

begin

process (nLoad,clk)

begin

if nLoad= '0' then

q<=datain;

elsif clk'event and clk='1' then

q(1)<=q(0);

for i in 1 to 39 loop

q(i)<=q(i-1);

end loop;

end if;

end process;

process (nLoad,clk)

begin

if nLoad='0' then

data_out<='0';

elsif clk'event and clk='1' then

data_out <=q(39);

end if;

end process;

end Behavioral;

把所有的39改成15就可以了

有一些基本概念我可能还不太清楚,说错的地方,请大家批评指教。

我要设计的是is-95cdma系统的48阶fir滤波器。

输入串行数据(每个clk输入1位)

输入数据宽度为1位,系数h[0]=-0.025288315(十进制)=111111_1111100111(16位二进制,_为小数点位置,_前面是符号扩展),-h[0]=+0.025288315(十进制)000000_(16位二进制)。其他系数略。

我用的是映射的方法,即不用乘法,只对应由查找表查出的结果,输入1时,映射为+1,查表输出h[0],输入0时,映射为-1,查表输出-h[0]。再送入加法器求48个系数的和。

系数宽度16位,输出宽度22位(防溢出)

datain=1 ,dataout=16116a(十六进制)=(22位二进制)

这是48个正系数的和(这里的正系数不一定全是正数,而只是标准,所以把它看作“正数”)

datain=0 ,dataout=19ee96(十六进制)=1010010110(22位二进制)

这是48个负系数的和。

这个结果我对照十进制的数运算结果验证了一下,是对的,但是只能取22位的后16位来计算,因为高位的都是加法的进位溢出。

我主要由两个问题:

1)这种映射法,恕我愚钝,根本没明白(我也是看的论文,但没有明白其真正含义),因为它和普通的比如m位输入和n位的系数相乘得到m+n位的结果,思路完全不一样。这个1,0映射为+1,-1,和普通的输入(m位二进制数代表一个x(n))有何关系?我的到16116a,19ee96这些结果还要累加吗?

(此问题可能比较愚蠢,欢迎扔鸡蛋)

2)我运算的是有符号数,那溢出的这些多出的位怎么处理?因为下一步这些数据还要送到下一个模块处理。保留的话,多出的哪些位显然没用。扔掉的话,行吗?

学了FOR LOOP的用法以后,有点想法

那么在此基础上怎么实现并口的输出呢?

如:

Q(0)<=DIN;

FOR I IN 1 DOWNTO 7 LOOP

Q(I)<=Q(I-1);

END LOOP;

OP<=Q;

OP 定义为STD_LOGIC_vector(7 downto 0)

我总感觉每次触发输出的都是在Q(7)口,而且该值就是DIN在8个周期前的值

那么要是想实现DIN 8个连续数据的同时输出,应该怎么做?

感觉每次触发输出的都是在Q(7)口

这句话不是很明白。

反正这样的转换很快的,只要有触发,马上可以完成分析如下:

q(0)->q(1),然后q(1)->q(2),然后q(2)->q(3)........q(6)->q(7)

实际上只是延迟了几个周期,也就是q(7)<=din,

并没有实现串行向并行的转换

不大理解用这个for loop语句如何实现串并转换的

望告知把

Q(0)<=DIN;

FOR I IN 1 DOWNTO 7 LOOP

Q(I)<=Q(I-1);

END LOOP;

放在进程里面就可以。同志,做cpld/fpga设计的时候需要记住一点,verilog是硬件设计而不是软件编程,所以,做好不要使用for循环这样的语句,太浪费资源了!

思考的时候要学会使用DFF这应该是个移位寄存的电路,也是DIN 8个连续数据的同时输出,只不过是移位1次,就并处一次。其实隔8个周期看一下输出,就是你要的结果了。

真要串入8位,并出1次,要一个计数器或状态机也行啊去构建自己想要的电路!

这是我写的,5分频的,改变计数器,可以是别的奇数分频

library IEEE;

use _LOGIC_;

use _LOGIC_;

use _LOGIC_;

end process;

clk3 <= c0 and c1; end Behavioral;

c0,c1一个在时钟的上升沿变化,一个在下降沿变化,所以两个会有半个周期的差,and以后就可以得到

想要得分频了。你可以仿真波形看看

两个时钟,一个为64K的时钟,一个为2.048M时钟,怎样检测64K时钟的上升沿?既检测到64K的时钟的上升沿就产生一个控制信号。怎样做?做出来你也能进UT....... 这跟检测信号的变化有什么区别吗?

设64K时钟为信号,速率X2=128K

采样时钟128K*4=512K(有2.048M更好了)

加1状态机就可以了! 如果要求产生的控制信号与64K时钟上升沿对齐的话,就有点麻烦了!

-- There is rising edge of clk64k detected when Ctrl signal is high.

library IEEE;

use _logic_;

entity det is

port(

rst: in std_logic;

clk64k: in std_logic;

clk2m: in std_logic;

ctrl: out std_logic);

end det;

architecture behv of det is

signal clk64k_q1: std_logic;

signal clk64k_q2: std_logic;

begin

process(rst,clk2m)

begin

if(rst='0') then

clk64k_q1<= '0';

clk64k_q2<= '0';

elsif(clk2m'event and clk2m='1') then

clk64k_q1<= clk64k;

clk64k_q2<= clk64k_q1;

end if;

end process;

ctrl<= '1' when clk64k_q1='1' and clk64k_q2='0' else '0';

end behv;

2.048MHz/64K=32

其实就是检测64KHz信号上升沿位于上述32象限的哪个,当然也就是可以用状态机(2MHz)实现;

当然也不是需要32个register才能实现的,因为在32次检测过程中只有16个连续的0或1,那么也只需2个register保存状态就可以了。

既然能检测到64KHz信号的变化,那么剩下的事情就不难了,无非就是对该状态信号作一定处理,如要2M脉宽,上面便是,如要与64K上升沿同步,那就将2M脉宽同64K信号作些处理。建议用状态机FSM来实现,这是由于一旦检测到符号要求的信号,那么剩下的处理就会比较简单,都是利用该信号作进一步的处理--至少前面的FSM将这个变化(我认为变化比边沿合适)是确定的。---扯远了!

呵呵,刚在别的版块发了个关于按键去抖动的帖子是VHDL的可以参考下

signal a0,a1;

process(clk)

begin

if(clk'event and clk='1') then

a1<=a0;

a0<=key; ---key 为按键信号

end if;

end process;

process(a0,a1)

begin

keyout<=key and a0 and (not a1); --keyout即为所要得到的单脉冲

end process;

******************************************************************

分频技术几点

******************************************************************

10.1分频

9次10分频和1次11分频

因为

(9×10+1×11)/(9+1)=10.1

******************************************************************

实例:用于实现N-0.5分频

******************************************************************

begin

-------异或门

clk <= inclk xor divide2; --------inclk(输入时钟)

-------模N减法计数器

process(clk)

if (clk'event and clk='1') then

if (count="0000") then

count <= present-1; --------outclk(输出时钟) ,present

预置分频值,即N值

outclk <= '1';

else

count <= count-1;

outclk <= '0';

end if;

end if ;

end process;

------2分频器

process(outclk)

begin

if (outclk'event and outclk='1') then

divide2 <= not divide2;

end if;

end process;

******************************************************************

3分频实例:

******************************************************************

LIBRARY ieee;

USE _logic_;

USE _logic_;

ENTITY div3 IS

PORT ( clk_in :in std_logic;

clk_out :out std_logic);

END div3;

ARCHITECTURE behav OF div3 IS

SIGNAL clk1,clk2:std_logic_vector(1 DOWNTO 0);

BEGIN

PROCESS1:PROCESS(clk_in)

BEGIN

IF clk_in'event AND clk_in='1' THEN

CASE clk1 is

WHEN "00" => clk1 <= "01";

WHEN "01" => clk1 <= "11";

WHEN "11" => clk1 <= "00";

WHEN OTHERS => clk1 <= "00";

END CASE;

END IF;

END PROCESS PROCESS1;

PROCESS2:PROCESS(clk_in)

BEGIN

IF clk_in'event AND clk_in='0' THEN

CASE clk2 IS

WHEN "00" => clk2 <= "01";

WHEN "01" => clk2 <= "11";

WHEN "11" => clk2 <= "00";

WHEN OTHERS => clk2 <= "00";

END CASE;

END IF;

END PROCESS PROCESS2;

clk_out <= '1' WHEN(clk1 AND clk2)=0

ELSE '0';

END behav

1。集成电路设计前端流程及工具。

2。FPGA和ASIC的概念,他们的区别

3。LATCH和DFF的概念和区别

4。用DFF实现二分频。

5。用VERILOG或VHDL写一段代码,实现消除一个glitch

6。给一个表达式f=xxxx+xxxx+xxxxx+xxxx用最少数量的与非门实现(实际上就是化简)

7。用VERILOG或VHDL写一段代码,实现10进制计数器。

8。给出一个门级的图,又给了各个门的传输延时,问关键路径是什么,还问给出输入,使得输出依赖于关键路径。

9。A,B,C,D,E进行投票,多数服从少数,输出是F(也就是如果A,B,C,D,E中1的个数比0多,那么F输出为1,否则F为0),用与非门实现,输入数目没有限制。


本文标签: 信号 设计 时钟 触发器