阿里巴巴2021年数字IC-笔试题

该博客介绍了如何使用Verilog描述一个检测序列1001001的单bit计数器,以及设计一个根据硬币投入判断饮料售卖和找零状态的32位计数器。状态图详细展示了饮料售卖逻辑,包括0.5元和1元硬币的组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题1. 检测序列1001001,输入单bit,检测成功的次数用cnt表示,使用verilog描述?

Module	AAA
#(
parameter	width = 4 ;
)
(
Input	clk,
Input	rst_n,
Input	data_in,
Output	reg	[width-1:0]	cnt
);
//可以使用真实状态表示,也可以用gray或者binary表示。
Parameter	idle = 7’b0000000;
Parameter	s1 = 7’b0000001;
Parameter	s2 = 7’b0000010;
Parameter	s3 = 7’b0000100;
Parameter	s4 = 7’b0001001;
Parameter	s5 = 7’b0010010;
Parameter	s6 = 7’b0100100;
Parameter	s7 = 7’b1001001;
Reg		[6:0]	state_current ;
always@(posedge clk or negedge rst_n)
begin
	if(rst_n==0)
begin
		state_current <= idle ;
cnt <= 0;
end
else
begin
	case(state_current)
		idle:
if(data_in==0)		state_current<=idle;
else				state_current<=s1;
s1:
if(data_in==0)		state_current<=s2;
else				state_current<=s1;
s2:
if(data_in==0)		state_current<=s3;
else				state_current<=s1;
s3:
if(data_in==0)		state_current<=idle;
else				state_current<=s4;
s4:
if(data_in==0)		state_current<=s5;
else				state_current<=s1;
s5:
if(data_in==0)		state_current<=s6;
else				state_current<=s1;
s6:
if(data_in==0)		state_current<=idle;
else				state_current<=s7;
s7:
if(data_in==0)		state_current<=idle;
else				state_current<=s1;

default:
begin
state_current <= idle ;
cnt <= 0;

end

end
end

always@(posedge clk or negedge rst_n)
begin
if(rst_n==0)
begin
cnt<=0;
end
else
if(state_current == s7)
cnt <= cnt+1 ;


end
endmodule

问题2:设计32bit计数器

问题3: 跨时钟域处理的几种方法,并用简单的代码进行描述

回答:

对于单bit信号使用两级寄存器

对于多bit信号,使用异步端口ram,异步fifo,格雷码转换。

问题4:

饮料价格是2.5元,每次投币一枚,分为0.5元和1元两种硬币。当投入2.5元时候,则售卖一瓶饮料,若投3元,则售卖一瓶饮料并找零0.5元,画出状态图,使用verilog描述?

 

Module AAA(
Input	clk,
Input	rst_n,
Input	wujiao_in,
Input	yiyuan_in,
Output	sell,
Output	zhaoling

);
Reg		[3:0]	currrent_state;
Parameter	s0 = 3’b000; //0yuan
Parameter	s1 = 3’b001; //0.5yuan
Parameter	s2 = 3’b010; //1.0yuan
Parameter	s3 = 3’b011; //1.5yuan
Parameter	s4 = 3’b100; //2.0yuan
Parameter	s5 = 3’b101; //2.5yuan
Parameter	s6 = 3’b110; //3.0yuan
always@(posedge clk or negedge rst_n)
begin
if(rst_n==0)
begin
sell <= 0;
zhaoling <= 0 ;
currrent_state <= s0;
end
end
else
begin
case(currrent_state)
s0://0yuan
begin
sell <= 0;
zhaoling <= 0 ;
			    	if(wujiao_in)	currrent_state<=s1;
else 	    if(yiyuan_in)	currrent_state<=s2;
end

s1://0.5yuan
begin
sell <= 0;
zhaoling <= 0 ;
			    	if(wujiao_in)	currrent_state<=s2;
else 	    if(yiyuan_in)	currrent_state<=s3;
end

s2://1.0yuan
begin
sell <= 0;
zhaoling <= 0 ;
			    	if(wujiao_in)	currrent_state<=s3;
else 	    if(yiyuan_in)	currrent_state<=s4;
end
s3://1.5yuan
begin
sell <= 0;
zhaoling <= 0 ;
			    	if(wujiao_in)	currrent_state<=s4;
else 	    if(yiyuan_in)	currrent_state<=s5;
end
s4://2.0yuan
begin
sell <= 0;
zhaoling <= 0 ;
			    	if(wujiao_in)	currrent_state<=s5;
else 	    if(yiyuan_in)	currrent_state<=s6;
end
s5://2.5yuan
begin
sell <= 1;
zhaoling <= 0 ;
			    	if(wujiao_in)	currrent_state<=s1;
else 	    if(yiyuan_in)	currrent_state<=s2;
end
s6://3.0yuan
begin
sell <= 1;
zhaoling <= 1 ;
			    	if(wujiao_in)	currrent_state<=s1;
else 	    if(yiyuan_in)	currrent_state<=s2;
end

default: 
begin
currrent_state <= s0;
sell <= 0;
zhaoling <= 0 ;
end
endcase
end

Endmodule

安装Docker安装插件,可以按照以下步骤进行操作: 1. 首先,安装Docker。可以按照官方文档提供的步骤进行安装,或者使用适合您操作系统的包管理器进行安装。 2. 安装Docker Compose插件。可以使用以下方法安装: 2.1 下载指定版本的docker-compose文件: curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose 2.2 赋予docker-compose文件执行权限: chmod +x /usr/local/bin/docker-compose 2.3 验证安装是否成功: docker-compose --version 3. 在安装插件之前,可以测试端口是否已被占用,以避免编排过程中出错。可以使用以下命令安装netstat并查看端口号是否被占用: yum -y install net-tools netstat -npl | grep 3306 现在,您已经安装Docker安装Docker Compose插件,可以继续进行其他操作,例如上传docker-compose.yml文件到服务器,并在服务器上安装MySQL容器。可以参考Docker的官方文档或其他资源来了解如何使用DockerDocker Compose进行容器的安装和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Docker安装docker-compose插件](https://blog.youkuaiyun.com/qq_50661854/article/details/124453329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Docker安装MySQL docker安装mysql 完整详细教程](https://blog.youkuaiyun.com/qq_40739917/article/details/130891879)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值