攻略详情顶部广告位

广告位招商中 · 后台投放后此处展示广告

求职攻略

求职攻略 IC设计中会用C语言做啥呢

阅读 09/14/2026

不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我

今天继续为大家解析联发科技数字IC设计岗的笔试题。

14、【简答题】设计一个“1101”或“1110”串行序列的检测器(两种序列需同时检测),画出状态转换图,并用HDL语言实现这个状态机(15分)

解析:本题目主要考察了状态机的相关知识

本题是一道常规的序列检测类状态机题目,不同的是需要检测两个序列。序列检测一般分为可重叠检测和不可重叠检测,本题我们就基于可重叠检测来解析。

状态转换图如下所示:

HDL代码如下所示:

//-------------------

01 module fsm(

02 inputwireclk ,

03 inputwire rst_n ,

04 inputwiredin ,

06 outputregdout

07 );

09 parameter S0 = 5'b00001;

10 parameter S1 = 5'b00010;

11 parameter S2 = 5'b00100;

12 parameter S3 = 5'b01000;

13 parameter S4 = 5'b10000;

15 reg [4:0] state;

17 //第一段状态机

18 always@(posedge clk or negedge rst_n)

19 if(!rst_n)

20 state <= S0;

21 else case(state)

22 S0 :if(din == 1'b1)

23 state <= S1;

24 else

25 state <= S0;

26 S1 :if(din == 1'b1)

27 state <= S2;

28 else

29 state <= S0;

30 S2 :if(din == 1'b1)

31 state <= S4;

32 else

33 state <= S3;

34 S3 :if(din == 1'b1)

35 state <= S1;

36 else

37 state <= S0;

38 S4 :if(din == 1'b1)

39 state <= S4;

40 else

41 state <= S3;

42 default:state <= S0;

43 endcase

45 //第二段状态机

46 always@(posedge clk or negedge rst_n)

47 if(!rst_n)

48 dout <= 1'b0;

49 elseif((state == S3 && din == 1'b1) || (state == S4 && din == 1'b0))

50 dout <= 1'b1;

51 else

52 dout <= 1'b0;

54 endmodule

//------------------

用QuartusII综合后的状态转移图如下所示:

Testbench如下所示:

//------------

01 moduletb_fsm();

03 regclk;

04 regrst_n;

05 regdin;

07 wiredout;

09 //初始化系统时钟、全局复位

10 initialbegin

11 clk = 1'b1;

12 rst_n <= 1'b0;

13 #20

14 rst_n <= 1'b1;

15 #1000

16 $finish;

17 end

19 always#10clk = ~clk;

21 //产生din的非负随机数

22 always@(posedge clk or negedge rst_n)

23 if(!rst_n)

24 din <= 1'b0;

25 else

26 din <= {$random} % 2;

28 //-------------

29 //在QuestaSim仿真时让波形显示状态机的名字

30 //--------------

31 parameter S0 = 5'b00001;

32 parameter S1 = 5'b00010;

33 parameter S2 = 5'b00100;

34 parameter S3 = 5'b01000;

35 parameter S4 = 5'b10000;

37 wire [4:0] state = fsm_inst.state; //将RTL模块中的内部信号引入到Testbench模块中来

38 reg [15:0] state_name;//1个字符8位宽,这里我们要显示的最长的字符为“S0”2个字符,所以需要16位

40 //state_name:状态对应状态变量名

41 always@(*)

42 case(state)

43 S0 : state_name = "S0";

44 S1 : state_name = "S1";

45 S2 : state_name = "S2";

46 S3 : state_name = "S3";

47 S4 : state_name = "S4";

48 default : state_name = "S0";

49 endcase

50 //-----------------

52 //----fsm_inst----

53 fsm fsm_inst(

54 .clk (clk ),//input clk

55 .rst_n (rst_n ),//input rst_n

56 .din (din ),//input din

58 .dout (dout )//output dout

59 );

61 endmodule

//---------------

用QuestaSim仿真出的波形如下所示:

15、【简答题】有一套四位数加密系统,输入四位数以后会自动加密,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,分别再将第一位和第四位交换,第二位和第三位交换,请用C语言写出加密算法(15分)

解析:本题目主要考察了C语言编程技能

这道题目是通过C语言实现一个小算法,其实并不难,所考察到的C语言知识点也比较有限,相关专业的同学肯定都学习过C语言,且Verilog语言也是基于C进行的改进,所以对大家来说并不难。IC岗之所以考察C语言相关的内容我认为主要基于以下几点的考虑:

1)协助验证工程师做系统级验证。在做验证时不仅仅会用到SystemVerilog和UVM,有时还会直接对软CPU的寄存器进行配置,以此来做带CPU的系统验证,即模拟嵌入式开发的过程。先编写C语言配置寄存器的代码,然后通过编译器把C语言编译成CPU可以直接读取的hex等文件放入到ROM中,在CPU初始化的时候读取ROM中的内容,从而实现对系统做一些配置工作。

2)协助芯片测试工程师测试。在做芯片测试时,有些时候会需要设计工程师配合,因为设计工程师对寄存器的配置是最清楚的。而芯片测试时往往会涉及到嵌入式、单片机等相关的寄存器配置,都会用到嵌入式C语言。

3)编写一些简单的处理脚本。其实C语言也可以实现一些相关的操作,虽然没有上一节我们讲过的脚本使用起来那么方便,但做一些简单的数据处理还是游刃有余的。

本题的C语言参考代码如下所示:

//----------

01 #include

03 int main()

04 {

05 int din;

06 char A, B, C, D;

07 char A1, B1, C1, D1;

08 int dout;

10 while(1){

11 printf("please input din: ");

12 scanf("%d", &din); //输入一个4位数

14 //输入大于4位数以外的值直接退出

15 if(din < 10000){

16 //C语言中最常用的取位方法

17 A = din/1000; //取千位

18 B = (din%1000)/100;//取百位

19 C = (din%100)/10; //取十位

20 D = (din%10); //取个位

22 //每一位都加5求余数后替换该位

23 A1 = (A+5)%10;

24 B1 = (B+5)%10;

25 C1 = (C+5)%10;

26 D1 = (D+5)%10;

28 //第1位和第4位交换

29 dout = D11000+C1100+B1*10+A1;

30 printf("dout = %d\n", dout);

31 }

32 else{

33 printf("Exit\n");

34 break;

35 }

36 }

37 return 0;

38 }

//--------------

使用CodeBlocks编译得到的结果如下所示:

END

求职攻略系列汇总:

☞ 点击这里查看达尔闻全部解析文章

☞ 大华FPGA岗位

☞ 大疆FPGA逻辑岗

☞ 华为硬件逻辑岗

☞ 紫光展锐IC岗

☞ 中兴FPGA岗位

☞ 泰凌微数字电路设计岗

☞ 硬件岗位解析

☞ 紫光展锐硬件岗

☞ 艾为电子数字IC设计岗

☞ 海康威视硬件岗

☞ 大疆硬件岗

☞ 联发科技数字IC设计岗

攻略详情中部广告位

广告位招商中 · 后台投放后此处展示广告

攻略详情底部广告位

广告位招商中 · 后台投放后此处展示广告