名称如标题所示,希望大家正确食用(点赞+转发+评论)
本次笔试题以两种形式考察的,分别是:选择题(包括单选和多选)和编程题。这里强调的是笔试全英文!!!其实不光这一家公司,很多都是这样的,所以,英语还是那么的重要!一共5个选择+2个编程题。
PS:大家在做笔试题的时候一定注意看清考察的题型,这很重要,如果全是简答题的话,那基本就会考察到基本知识、画图以及编程的内容,此时需要你备好纸笔等工具;如果涉及到编程题的话,还是得去刷一刷某客网的题目,感觉很不错,除了这个以外,入门级别的刷题网站还有HDLBits,比较基础,时间充裕也可以刷刷。
下边是具体的题目,仅仅是回忆,哈哈哈!!!
答案仅供参考哈!因为我也是通过查资料学习分享给大家的,有时候不一定保证正确性,但我也是抱着学习的态度给大家分享,我尽可能保证分享的准确性,如有错误,欢迎批评指正!
1. 题目 & 答案
单选题
考察运算符的优先级、reg默认值、initial是否可以综合、进制转换、4’b100x+4’1001得到什么?(那肯定是4’bxxxx)
PS:选择题一般比较难回忆,所以只会写出知识点,而不会将题目写出来的,望谅解!
编程题
问题1:
找出输入序列的第一个0或者1
解析1:
这个问题主要就是从一串序列中找到我们想要得到的第一个数,不管是0还是1,找到它的位置即可!可以采用对折检查的方法,比如8位的串,可以分为前半串的4位和后半串的4位进行检查,这里我们以发现第一个1为例子。
module find_ones(
input [7:0] x,
output [2:0] y);
wire [3:0] data_4;
wire [1:0] data_2;
assign y[2] = | x[7:4];
assign data_4= y[2] ? x[7:4] : x[3:0] ;
assign y[1] = | data_4[3:2];
assign data_2 = y[1] ? data_4[3:2] : data_4[1:0];
assign y[0] = data_2[1];
endmodule
其余的情况大家可以自己研究一下,这个题的解题思路我记得当时是来自网上一篇博客,就是“用Verilog实现寻找第一个1和最后一个1的位置”,也可以把这个题目思考一下!!!
问题2:
斐波那契数列实现
解析2:
做题之前需要知道什么是斐波那契数哦!斐波那契数列指的是这样一个数列:0、1、1、2、3、5、8、13、21、……,意思是后一个数是前两个数之和。其实这个题目也不是很难,但需要注意的是,第一个数是0哦!
`timescale 1ns / 1ps
module fib_generator(
input clk,
input rst_n,
output reg [7 : 0] fib
);
reg [7 : 0] num1, num2;
wire [7 : 0] fib_in;
reg cnt;
always@ (posedge clk or negedge rst_n)
begin
if(!rst_n) begin
num1 <= 8'h1;
num2 <= 8'h1;
end
else if(!cnt)
num1 <= num1 + num2;
else
num2 <= num1 + num2;
end
always@ (posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt <= 0;
else
cnt <= ~cnt;
end
assign fib_in = cnt ? num2 : num1;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
fib <= 'h0;
else
fib <= fib_in;
end
endmodule
写出来不一定百分比对,只会给大家做个参考。
声明
本人所有系列的文章,仅供学习,不可商用,如有侵权,请告知,立删!!!
本人主要是记录学习过程,以供自己回头复习,再就是提供给后人参考,不喜勿喷!!!
如果觉得对你有用的话,记得收藏+评论!!!
全网各平台同名===> “IC二舅”
下一期如果有大家想看的 或者 哪块不懂想学习的,可以私聊或在群里提问都可以,“二舅” 给你安排上!!!