当前位置: 首页 > article >正文

很能体现FPGA硬件思维的一道面试题

ec565903202c4cb7a0ef13caf38c7c61.jpeg

在面试的时候,要在短时间检查一个人的水平,需要面试官有针对性的问些问题,这里举例说一个很能体现FPGA硬件思维的一道面试题。

  • if-else及case语句条件判断的优先级

这里先列出几个例子,大家可以先自行判断以下:

example1

module test_ex1(
    input a,b,c,d,sel0,sel1,sel2,sel3,
    output reg z
    );

always @(a or b or c or d or sel0 or sel1 or sel2 or sel3)
begin
  z=0;
  if (sel0) z=a;
  if (sel1) z=b;
  if (sel2) z=c;
  if (sel3) z=d;
end

endmodule
042e62914f12e036d5824258ab230007.png图1:example1

example2

module test_ex2(
    input a,b,c,d,sel0,sel1,sel2,sel3,
    output reg z
    );
    
always@(a or b or c or d or sel0 or sel1 or sel2 or sel3)
begin
 if(sel0)
  z = d;
 else if(sel1)
  z = c;
 else if(sel2)
  z = b;
 else if(sel3)
  z = a;
 else
  z = 0;
end

endmodule
957189d035d889fcf8b453ce759ed6f6.png图2:example2

example3

module test_ex3(
    input a,b,c,d,sel0,sel1,sel2,sel3,
    output reg z
    );
    
always@(a or b or c or d or sel0 or sel1 or sel2 or sel3)
begin
 if(sel0)
  z = d;
 else if(sel1)
  z = c;
 else if(sel2)
  z = b;
 else if(sel3)
  z = a;
end

endmodule
6b9b5c35ed540c629613f6e06c73f8f9.png图3:example3

example4

module test_ex4(
    input a,b,c,d,sel0,sel1,sel2,sel3,
    output reg [3:0] z
    );

always @(a or b or c or d or sel0 or sel1 or sel2 or sel3)
begin
  z=0;
  if (sel0) z[0]=a;
  if (sel1) z[1]=b;
  if (sel2) z[2]=c;
  if (sel3) z[3]=d;
end

endmodule
5347974904e48cfd380dd6628cd1f0cb.png图4:example4

example5

module test_ex5 
#(parameter N=8)
(
 input  logic [N-1:0] a, b, c, d,
 input  logic [  1:0] select,
 output logic [N-1:0] y
);

 always_comb begin 
   case (select)
     2'b00: y = a;
     2'b01: y = b;
     2'b10: y = c;
     2'b11: y = d;
   endcase 
 end 
endmodule: test_ex5
5fb308baa0ac056ca41ab8e40b896537.png图5:example5

example6

module test_ex6 (
input  logic [3:0] d_in,
output logic [1:0] d_out,
output logic       error
);
timeunit 1ns; timeprecision 1ns; 

always_comb begin 
  error = '0;
  case (d_in) inside 
    4'b1???: d_out = 2'h3; // bit 3 is set
    4'b01??: d_out = 2'h2; // bit 2 is set
    4'b001?: d_out = 2'h1; // bit 1 is set
    4'b0001: d_out = 2'h0; // bit 0 is set
    4'b0000: begin         // no bits set
               d_out = 2'b0;
               error = '1;
             end
  endcase 
end 
endmodule: test_ex6
74ed291859a8a4ea48059a2de0f722c2.png

以上几个示例,大家可以先思考一下每个例子的判断条件优先级,然后再结合电路图对照一下自己的想法对不对。

总结

"if-else的逻辑判别是有优先级的,而case的逻辑判断条件是并列的。"

上面是某些工具书上常见的判断逻辑,也是误导很多新手的结论。

从结果来看判断的优先级不一定是第一个,和后续的书写语句有很大关系(if有没有else、else条件是否完备、case条件是否完备等)。

其中,case语句可以使用unique、unigue0和priority修饰符进行综合条件限制,但是一般不建议使用,要按照自己的思路去书写“电路”。

最后就是常说的串行或者并行应该指语法判断过程,并非指我们说的电路,实际的判断过程还是用硬件思维去思考。

大家在面试时候遇到或者问过什么问题?欢迎大家评论区留言


http://www.kler.cn/a/403121.html

相关文章:

  • 常用Adb 命令
  • 【进阶系列】python简单爬虫实例
  • nvm安装node遇到的若干问题(vscode找不到npm文件、环境变量配置混乱、npm安装包到D盘)
  • ROS机器视觉入门:从基础到人脸识别与目标检测
  • GRU (门控循环单元 - 基于RNN - 简化LSTM又快又好 - 体现注意力的思想) + 代码实现 —— 笔记3.5《动手学深度学习》
  • 一次封装,解放双手:Requests如何实现0入侵请求与响应的智能加解密
  • docker的logs命令可以查看docker容器日志
  • [BSidesCF 2019]SVGMagic
  • 代替Spinnaker 的 POINTGREY工业级相机 FLIR相机 Python编程案例
  • pytest | 框架的简单使用
  • Knife4j与springboot集成自动编写API文档
  • 《生成式 AI》课程 第3講 CODE TASK 任务3:自定义任务的机器人
  • 【传知代码】VRT_ 关于视频修复的模型
  • mysql中mvcc如何处理纯读事务的?
  • 《数据结构》学习系列——图(上)
  • 如何控制自己玩手机的时间?两台苹果手机帮助自律
  • JDBC使用p6spy记录实际执行SQL方法【解决SQL打印两次问题】
  • AWS 多区域部署实战:Route 53 加权路由与多层健康检查
  • 反转链表、链表内指定区间反转
  • 10 基于深度学习的目标检测
  • Redis 集群主要有以下几种类型
  • 【Android原生问题分析】夸克、抖音划动无响应问题【Android14】
  • 2. Django中的URL调度器 (自定义路径转换器)
  • Windows Server 2022 Web1
  • misc设备驱动
  • [系统安全]PE文件头中的重定位表