FPGA备战秋招---常用知识点

文章目录

  • 1.CMOS基本逻辑电路
  • 2.异或逻辑
  • 3.卡罗图简化函数
  • 4.二进制,格雷码互转
  • 5.产生锁存器latch
  • 6.异步复位同步释放
  • 7.SRAM,FALSHMEMORY,DRAM,SSRAM及SDRAM的区别?
  • 8 如何防止亚稳态
  • 9.奇数,偶数,任意分频
    • 任意偶数分频:
    • 任意奇数分频占空比(50%)
  • 10.FIFO
    • 十进制转格雷码
  • 11.快时钟域脉冲信号到到慢时钟域信号
    • 11.1脉冲同步
    • 11.2电平同步
  • 12.i++,i--,++i,--i
    • *p++,*++P,++*p
  • 13.BUCK电路
  • 14.数字IC设计流程
  • 15.为什么使用独热码,并不使用二进制编码或者格雷码
    • 1.1编码方式也能降低功耗,比如格雷码每次只变化1bit,就比二进制编码降低了功耗。
  • 16 RAM和ROM
    • SDRAM / SRAM
  • 17.&和&&
  • 18.状态机
  • 19.竞争与冒险
  • 20.同步电路和异步电路
  • 21.同步复位和异步复位
  • 22.全加器和半加器
  • 23.任务和函数
  • 24.线性移位寄存器
  • 25.CMOS实现Y=AB+C电路与版图
  • 26.二四译码器
  • 27.任意分频
  • 28.静态时序分析
    • 28.1中心对齐模式
    • 28.2边沿对齐模式
    • 28.3异步时钟,跨时钟域处理
  • 29.异步双口RAM和同步双口RAM
  • 30.阻塞赋值与function函数
  • 31.Tmin计算,即最大频率计算
  • 32.FPGA底层知识
    • 1.FPGA组成
    • 2.MMCM,PLL
    • 3. Bram,Dram
  • 32.项目芯片型号以及资源使用情况
    • 项目一:
    • 项目二
    • 项目三
  • 33.静态功耗和动态功耗
  • 34.Tsetup/Tholdup
    • 1.clock jitter:
    • 2.clock skew:
    • 3.时序为例
  • 35.前端设计的流程,每个流程是干什么的?
    • 1.STA(StaticTiming Analysis, STA)静态时序分析,
    • 2.formal形式验证:
    • 3.DFT
  • 36.请描述跨时钟域设计时会出现的问题及解决办法
  • 37.一个16bit序列,每个clk左移一位,要求检测5的倍数。
  • 38.负数的表示方法
  • 39.initial串 / fork jion并
  • 40.二态和四态变量
  • 41. Verilog
    • 1.描述语言4个层次
    • 2. verilog 中缺省的数据类型为?
  • 42.基本数据类型的存储空间长度排序为
  • 43.补码二进制转十进制
  • 44. 操作系统:
  • 45. timescale
  • 46.串行总线
  • 47.大小端模式
  • 48.缩写全称
  • 49.Memory hierarchy (存储结构)
    • 1.当前计算机一般都采用高速缓存-主存-辅存三级存储器结构
  • 50.二值逻辑和四值逻辑
  • 51.芯片参数
  • 52.时钟抖动(jitter) 和时钟偏斜(skew)
  • 53.DCM/PLL/DLL/MMCM
  • 54.理解FPGA中的RAM、ROM和CAM;ROM、RAM、DRAM、SRAM、FLASH
  • 55. 与非门、或非门可以表达任何逻辑表达式
  • 56.锁存器(latch)和触发器(filp-flop)的概念和区别?为什么多用register。行为级描述中latch如何产生的?
  • 57.时序分析案例
  • 58.跨时钟域处理
  • 59.outsatanding/out-of-order/interleaving
  • 60.axi3和axi4的区别
    • 1.burst length
    • 2.增加QoS(quality of service)
    • 3.增加Multiple region interface
    • 4. 修改了write response dependencies
    • 5.AWCACHE/ARCHACHE的修改
    • 6.Removal of WID

1.CMOS基本逻辑电路

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.异或逻辑

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.卡罗图简化函数

https://blog.youkuaiyun.com/hahasusu/article/details/88244155
在这里插入图片描述

4.二进制,格雷码互转

在这里插入图片描述

5.产生锁存器latch

在这里插入图片描述
在这里插入图片描述
6.OC门,OD门
在这里插入图片描述
在这里插入图片描述

6.异步复位同步释放

在这里插入图片描述

always @ (posedge clk or negedge rst_async_n)  
if (!rst_async_n) begin   
rst_s1 <= 1'b0;  
rst_s2 <= 1'b0;  
end  
else begin  
rst_s1 <= 1'b1;  
rst_s2 <= rst_s1;  
end  
 
assign rst_sync_n = rst_s2;   
endmodule

7.SRAM,FALSHMEMORY,DRAM,SSRAM及SDRAM的区别?

SRAM:静态随机存储器,存取速度快,但容量小,掉电后数据会丢失,不像DRAM 需要不停的REFRESH,制造成本较高,通常用来作为快取(CACHE) 记忆体使用。

FLASH:闪存,存取速度慢,容量大,掉电后数据不会丢失

DRAM:动态随机存储器,必须不断的重新的加强(REFRESHED) 电位差量,否则电位差将降低至无法有足够的能量表现每一个记忆单位处于何种状态。价格比SRAM便宜,但访问速度较慢,耗电量较大,常用作计算机的内存使用。

SSRAM:即同步静态随机存取存储器。对于SSRAM的所有访问都在时钟的上升/下降沿启动。地址、数据输入和其它控制信号均于时钟信号相关。

SDRAM:即同步动态随机存取存储器。

8 如何防止亚稳态

亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个 正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。

解决方法:

1 降低系统时钟频率

2 用反应更快的FF

3 引入同步机制,防止亚稳态传播(可以采用前面说的加两级触发器)。

4 改善时钟质量,用边沿变化快速的时钟信号
在这里插入图片描述

9.奇数,偶数,任意分频

任意偶数分频:

module Divider(
        input 	 wire 	  clk,
        input    wire     rst_n,
    
        output   reg      clk_div
);

parameter NUM_DIV = 6;
parameter Cyc_cnt = 3;//占空比
reg [3:0]    cnt;
always @(posedge clk or posedge rst_n) begin
	if (!rst_n) begin
		cnt <= 'd0;
	end
	else if (cnt==NUM_DIV-1) begin
		cnt <= 'd0;
	end
	else begin
		cnt <= cnt + 1'b1;
	end
end

always @(posedge clk or posedge rst_n) begin
	if (!rst_n) begin
		clk_div <= 1'b0;
	end
	else if (cnt > Cyc_cnt-1) begin
		clk_div <= 1'b0;
	end
	else begin
		clk_div <= 1'b1;
	end
end
endmodule

任意奇数分频占空比(50%)

任意奇数分频占空比(50%)
module Divider(
        input 	 wire 	  clk,
        input    wire     rst_n,
    
        output   wire     clk_div
);
//奇分频
parameter  NUM_DIV = 7;
//parameter  Cyc_cnt = 7;
reg	[2:0]  cnt1;
reg [2:0]  cnt2;

reg		clk_div1,clk_div2;

always @(posedge clk or negedge rst_n) begin
	if (!rst_n) begin
		cnt1 <= 'd0;
	end
	else if (cnt1 == NUM_DIV-1) begin
		cnt1 <= 'd0;
	end
	else begin
		cnt1 <= cnt1 + 1'b1;
	end
end

always @(posedge clk or negedge rst_n) begin
	if (!rst_n) begin
		clk_div1 <= 1'b0;		
	end
	else if (cnt1 < (NUM_DIV-1)/2) begin
		clk_div1 <= 1'b1;
	end
	else 
		clk_div1 <= 1'b0;
end

always @(negedge clk or negedge rst_n) begin
	if (!rst_n) begin
		cnt2 <= 'd0;		
	end
	else if (cnt2 == NUM_DIV-1 ) begin
		cnt2 <= 'd0;
	end
	else begin
		cnt2 <= cnt2 + 1'b1;
	end
end

always @(negedge clk or negedge rst_n) begin
	if (!rst_n) begin
		clk_div2 <= 1'b0;	
	end
	else if (cnt2 < (NUM_DIV-1)/2) begin
		clk_div2 <= 1'b1;
	end
	else 
		clk_div2 <= 1'b0;
end

assign  clk_div =	clk_div1 | clk_div2;

always

10.FIFO

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

assign  w_full = (r_addr[2:0]==w_addr[2:0]&&r_addr[3]==(~w_addr[3]);
assign  r_empty = (r_addr[3:0]==w_addr[3:0]);

十进制转格雷码

格雷码=(十进制数》1^(十进制数)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11.快时钟域脉冲信号到到慢时钟域信号

11.1脉冲同步

module top(
	input 	rst_n,
	input	clka,   //快时钟
	input	clkb,   //慢时钟
	input	pulse_ina,
	output	pulse_outb
);

	reg 	signal_a;
	reg		signal_b0,signal_b1,signal_b2,signal_b3;
	reg		[1:0] 	signal_a_r;
	reg		[1:0]	signal_b_r;
	
assign pulse_outb= signal_b0^signal_b1;
//在clka时钟下将signal_a展宽	
always @(posedge clka or negedge rst_n)
	if(!rst_n)
		signal_a <= 1'b0;
    else if(pulse_ina)
        signal_a <= ~signal_a;
        
always @(posedge clkb or negedge rst_n)
       if(!rst_n)begin
            signal_b0 <= 1'b0;
            signal_b1 <= 1'b0;
            signal_b2 <= 1'b0;
            signal_b3 <= 1'b0;
       end
       else begin
            signal_b0 <= signal_a;
            signal_b1 <= signal_b0;
            signal_b2 <= signal_b1;
            signal_b3 <= signal_b2;
       end
           

endmodule

11.2电平同步

module top(
	input 	rst_n,
	input	clka,   //快时钟
	input	clkb,   //慢时钟
	input	pulse_ina,
	output	pulse_outb
);

	reg 	signal_a;
	reg		signal_b0,signal_b1,signal_b2,signal_b3;
	
assign pulse_outb= signal_b1 &(~signal_b2);
//在clka时钟下将signal_a展宽	        
always @(posedge clkb or negedge rst_n)
       if(!rst_n)begin
            signal_b0 <= 1'b0;
            signal_b1 <= 1'b0;
            signal_b2 <= 1'b0;
            signal_b3 <= 1'b0;
       end
       else begin
            signal_b0 <= pulse_ina;
            signal_b1 <= signal_b0;
            signal_b2 <= signal_b1;
       end
           

endmodule

12.i++,i–,++i,–i

1、i++,先引用i的值,后增加i的值,

如int i=10;

int a=i++;

该程序运行后,a=10,而i=11。

2、i–,先引用i的值,后i的值减1。

如int i=10;

int a=i–;

该程序运行之后,a=10,i=9。

除了以上的用法外,还有一种表示法是++i或者–i,这种表示法i的值也会相应的自增1或者自减1,i的结果和i++与i–是相同的,但是当赋值给另一个变量时,对赋值的变量,结果却存在差别,因为++i代表先增加࿰

1.面积与速度的平衡与互换 这里的面积指一个设计消耗FPGA/CPLD的逻辑资源的数量,对于FPGA可以用消耗的FF(触发器)和LUT(查找表)来衡量,更一般的衡量方式可以用设计所占的等价逻辑门数。速度指设计在芯片上稳定运行所能达到的最高频率,这个频率由设计的时序状况来决定,以及设计满足的时钟要求:PADtoPADTIme、ClockSetupTIme、ClockHoldTIme、Clock-to-OutputDelay等众多时序特征量密切相关。面积和速度这两个指标贯穿FPGA/CPLD设计的时钟,是设计质量的评价的终极标准——面积和速度是一对对立统一的矛盾体。要求一个同时具备设计面积最小、运行频率最高是不现实的。更科学的设计目标应该是在满足设计时序要求(包括对设计频率的要求)的前提下,占用最小的芯片面积。或者在所规定的面积下,是设计的时序余量更大、频率跑的更高。这两种目标充分体现了面积和速度的平衡的思想。作为矛盾的两个组成部分,面积和速度的地位是不一样的。相比之下,满足时序、工作频率的要求更重要一些,当两者冲突时,采用速度优先的准则。从理论上讲,如果一个设计时序余量较大,所能跑的速度远远高于设计要求,那么就通过功能模块的复用来减少整个设计消耗的芯片面积,这就是用速度的优势换取面积的节约。反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么一般可以通过将数据流串并转换,并行复制多个操作模块,对整个设计采取乒乓操作和串并转换的思想运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值