Verilog面试题(一)——2020乐鑫科技数字IC(串转并、饮料售卖机)

2024-03-02 07:08

本文主要是介绍Verilog面试题(一)——2020乐鑫科技数字IC(串转并、饮料售卖机),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 题目一:将一个串行执行的C语言算法转化为单拍完成的并行可综合verilog。
    • 思路
    • 代码
      • 知乎数字芯片实验室
      • 牛客讨论区
  • 题目二:饮料售卖机
    • 思路
    • E课网
    • 代码(牛客讨论区)

题目一:将一个串行执行的C语言算法转化为单拍完成的并行可综合verilog。

unsigned char cal_table_high_first(unsigned char value)
{unsigned char i ;
unsigned  char checksum = value ; for (i=8;i>0;--i){if (check_sum & 0x80){check_sum = (check_sum<<1) ^ 0x31;}else{check_sum = (check_sum << 1);}}return check_sum;
}

思路

在这里插入图片描述
在这里插入图片描述
图片来源知乎https://zhuanlan.zhihu.com/p/69969288

代码

知乎数字芯片实验室

以下代码目前没看懂
verilog实现

module loop1(input clk,input rst_n,input [7:0] check_sum,output reg [7:0] check_sum_o
);
//reg [7:0] check_sum_o;
always @ (posedge clk or negedge rst_n)if (!rst_n)begincheck_sum_o <= 8'h0;endelsebegincheck_sum_o[7] <= check_sum[3]^check_sum[2]^check_sum[5];check_sum_o[6] <= check_sum[2]^check_sum[1]^check_sum[4]^check_sum[7];check_sum_o[5] <= check_sum[1]^check_sum[7]^check_sum[0]^check_sum[3]^check_sum[6];check_sum_o[4] <= check_sum[7]^check_sum[0]^check_sum[3]^check_sum[6];check_sum_o[3] <= check_sum[3]^check_sum[7]^check_sum[6];check_sum_o[2] <= check_sum[2]^check_sum[6]^check_sum[5];check_sum_o[1] <= check_sum[1]^check_sum[5]^check_sum[4]^check_sum[7];check_sum_o[0] <= check_sum[0]^check_sum[4]^check_sum[3]^check_sum[6];end
endmodule

tb

module loop1_tb;reg clk;reg rst_n;reg [7:0] check_sum;wire [7:0] check_sum_o;always #1 clk=~clk;initial  beginclk = 0;rst_n = 0;#10 rst_n = 1;for (check_sum=0;check_sum<16;check_sum=check_sum+1)  begin#2 //check_sum = i;$display ("check_sum = %h", check_sum_o);if (check_sum == 15)  $stop;end//$stop;endloop1 loop1_i1(.clk(clk),.rst_n(rst_n),.check_sum(check_sum),.check_sum_o(check_sum_o));
endmodule

来源知乎https://zhuanlan.zhihu.com/p/69969288

牛客讨论区

.1.

module check_sum(clk, rst, value, checksum);input clk, rst;input [7 : 0] value;output reg [7 : 0] checksum;parameter word_size = 8;wire [7:0] checksum1;wire [7:0] checksum2;wire [7:0] checksum3;wire [7:0] checksum4;wire [7:0] checksum5; wire [7:0] checksum6;wire [7:0] checksum7;wire [7:0] checksum8;assign checksum1 = (value[word_size-1] == 1) ? ( (value<<1)^8'h31 ) : ( value<<1 );
assign checksum2 = (checksum1[word_size-1] == 1) ? ( (checksum1<<1)^8'h31 ) : ( checksum1<<1 );
assign checksum3 = (checksum2[word_size-1] == 1) ? ( (checksum2<<1)^8'h31 ) : ( checksum2<<1 );
assign checksum4 = (checksum3[word_size-1] == 1) ? ( (checksum3<<1)^8'h31 ) : ( checksum3<<1 );
assign checksum5 = (checksum4[word_size-1] == 1) ? ( (checksum4<<1)^8'h31 ) : ( checksum4<<1 );
assign checksum6 = (checksum5[word_size-1] == 1) ? ( (checksum5<<1)^8'h31 ) : ( checksum5<<1 );
assign checksum7 = (checksum6[word_size-1] == 1) ? ( (checksum6<<1)^8'h31 ) : ( checksum6<<1 );
assign checksum8 = (checksum7[word_size-1] == 1) ? ( (checksum7<<1)^8'h31 ) : ( checksum7<<1 );always @(posedge clk)beginif(rst) checksum <= 0;else checksum <= checksum8;endendmodule
module checksum #(parameter word_size = 8)(clk, rst, value, checksum);input clk, rst;input [word_size-1: 0] value;output reg [word_size-1: 0] checksum;integer i;always @(posedge clk)if(rst)    checksum <= 0;else  begin//checksum <= 0; 我觉得这句没有应该不影响checksum <= value;for(i=8; i>0; i=i-1) beginif(checksum[word_size-1] == 1)checksum <= (checksum<<1)^8'h31;else checksum <= checksum<<1;endend
endmodule

题目二:饮料售卖机

设计一个自动饮料售卖机,共有两种饮料,其中饮料 A 每个 10 分钱,饮料 B 每个 5 分钱,硬币有 5 分和 10 分两种,并考虑找零。
要求用状态机实现,定义状态,画出状态转移图,并用 Verilog 完整描述该识别模块

思路

售卖机有五种工作状态:闲置、卖5分饮料、卖10分饮料、找零、不找零
输入有三种状态:闲置、按键5分、按键10分、收钱5分,收钱10分

输入:clk,rst,a,b,c
c=0售货机处于闲置状态,c=1售卖状态;c=1,a=0选5分的饮料,c=1,a=1选10分的饮料;b=0售货机收5分钱,b=1收10分钱
输出:state,x,y,k
x=1卖出10分的饮料,y=1卖出5分的饮料,k=1找零
中间寄存器:x,y,k,state
参数:Idle,sel,sel,reward,n_reward

E课网

代码(牛客讨论区)

module    sel_machine(clk,rst,a,b,c,state,x,y,k);input    clk,rst;input    a,b,c;   //c=1,a=0选5分的饮料,c=1,a=1选10分的饮料;//c=0售货机处于闲置状态,c=1售货机处于售卖状态;//b=0售货机收5分钱,b=1收10分钱output    state,x,y,k;reg    x,y,k;    //x=1卖出10分的饮料,y=1卖出5分的饮料,k=1找零    reg    [2:0]    state;    //不同状态的地址parameter    Idle : 3'b1xx;    //售货机处于闲置状态sel5: 3'b001;    //售货机正在卖5分钱的饮料sel10:3'b010;    //售货机正在卖10分钱的饮料reward:3'b011;    //售货机找零n_reward:3'b000;    //售货机不找零always @ (posedge clk) beginif (!rst)  beginstate <= Idle;x <= 0;y <= 0;endelsecase(state)Idle:if(c=1)beginif(a)    state <= sel10;else    state <= sel5;endelse begin   state <= Idle;x <= 0;y <= 0;endsel5:    if(b)beginx <= 0;y <= 1;    state <= reward;endelse beginx <= 0;y <= 1;  state <= n_reward;endsel10:   if(b)  beginx <= 1;y <= 0;   state <= n_reward;endelsebeginx <= 1;y <= 0;      state <= Idle;endreward:    beignk <= 1;state <= Idle;endn_reward:     begink <= 0;   state <= Idle;enddefault:    state <= 3'b1xx;endcaseend
endmodule 

这篇关于Verilog面试题(一)——2020乐鑫科技数字IC(串转并、饮料售卖机)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/765304

相关文章

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展

【科技明说 | 科技热点关注】 2024戴尔科技峰会在8月如期举行,虽然因事未能抵达现场参加,我只是观看了网上在线直播,也未能采访到DTF现场重要与会者,但是通过数十年对戴尔的跟踪与观察,我觉得2024戴尔科技峰会给业界传递了6大重要信号。不妨简单聊聊:从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展? 1)退出中国的谣言不攻自破。 之前有不良媒体宣扬戴尔将退出中国的谣言,随着2

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不