状态机的相关知识以及C语言编程技能

今天继续为大家解析联发科技数字ic设计岗的笔试题。
14、【简答题】设计一个“1011”或“1110”串行序列的检测器(两种序列需同时检测),画出状态转换图,并用hdl语言实现这个状态机(15分)
解析:本题目主要考察了状态机的相关知识
本题是一道常规的序列检测类状态机题目,不同的是需要检测两个序列。序列检测一般分为可重叠检测和不可重叠检测,本题我们就基于可重叠检测来解析。状态转换图如下所示:
hdl代码如下所示: //-------------------
01 module fsm(
02 inputwireclk,
03 inputwire rst_n,
04 inputwiredin,
05 
06 outputregdout
07 );
08 
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;
14 
15 reg [4:0] state;
16 
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
44 
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;
53 
54 endmodule
//------------------
用quartusii综合后的状态转移图如下所示:
testbench如下所示:
//------------01 moduletb_fsm();02 03 regclk;04 regrst_n;05 regdin;06 07 wiredout;08 09 //初始化系统时钟、全局复位10 initialbegin11 clk   = 1'b1;12 rst_n <= 1'b0;13 #2014 rst_n   <= 1'b1;15 #100016 $finish;17 end18 19 always#10clk = ~clk;20 21 //产生din的非负随机数22 always@(posedge clk or negedge rst_n)23 if(!rst_n)24 din <= 1'b0;25 else26 din <= {$random} % 2;27 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;36 37 wire    [4:0]   state = fsm_inst.state;   //将rtl模块中的内部信号引入到testbench模块中来38 reg     [15:0]  state_name;//1个字符8位宽,这里我们要显示的最长的字符为“s0”2个字符,所以需要16位39 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      endcase50 //-----------------51 52 //----fsm_inst----53 fsmfsm_inst(54 .clk  (clk),//inputclk55 .rst_n(rst_n),//inputrst_n56 .din(din),//inputdin57 58 .dout(dout)//outputdout59 );60 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 02 03 int main()04 {05   int din;06   char a, b, c, d;07   char a1, b1, c1, d1;08   int dout;09 10   while(1){11     printf(please input din: ); 12     scanf(%d, &din); //输入一个4位数13 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);       //取个位21 22 //每一位都加5求余数后替换该位23 a1 = (a+5)%10;        24 b1 = (b+5)%10;25 c1 = (c+5)%10;26 d1 = (d+5)%10;27 28 //第1位和第4位交换   29 dout = d1*1000+c1*100+b1*10+a1;30 printf(dout = %d , dout);  31 }32 else{33 printf(exit );34 break;              35     }36   }37   return 0;  38 } //--------------
使用codeblocks编译得到的结果如下所示:


高压技术:氧化锌避雷器怎么判断是否合格
人工智能正式成为教师辅助,人工智能又向教育领域迈出重要一步
荣耀手环4NFC版体验 支付宝的离线支付十分方便
DoB高压线性驱动IC的发展趋势是怎样的
才茂智慧校园安防整体解决方案,筑牢校园安全屏障
状态机的相关知识以及C语言编程技能
关于英特尔Joule模块的分析和介绍
一文分析半导体行业的格局
如何使用ZCadToMoreV2.0导图软件导出G代码
关于食用油黄曲霉检测仪的技术参数介绍
iphone8什么时候呀上市?iphone8最新消息:iphone8将是史上最贵手机?iphone8六大亮点抢先看
谷歌I/O大会今晚1点拉开帷幕 谷歌I/O 2017开发者大会现场探营
马斯克揭晓全新动力电池4680型,能量增加5倍,电力容量提升6倍
新能源汽车动力总成解决方案
BDF与配置空间
摇摆蚀刻机
Microchip发布业界首款宇航级耐辐射以太网收发器
车内雷达可以感知第二排和第三排车辆中的儿童
松果处理器今日正式发布,小米5C手机登场,小米平板3或惊喜加持!
广东工地扬尘监测系统,扬尘噪声污染监测设备