当前位置:网站首页>[Digital IC manual tearing code] Verilog automatic beverage machine | topic | principle | design | simulation
[Digital IC manual tearing code] Verilog automatic beverage machine | topic | principle | design | simulation
2022-07-06 21:37:00 【myhhhhhhhh】
Preface
This series aims to provide 100% Accurate numbers IC Design / Verify the title of the hand tearing code link , principle ,RTL Design ,Testbench And reference simulation waveform , The content of each article is checked by simulation . The quick navigation links are as follows :
Odd frequency division
Even frequency division
Semi integer batch
decimal / Fractional frequency division
Sequence detector
Mode three detector
Beverage machine
Asynchronous reset , Simultaneous release
Edge detection ( Rising edge , Falling edge , On both sides )
Full adder , Half adder
Gray code to binary
single bit Cross clock domain ( Two beats , Edge synchronization , Pulse synchronization )
Sync FIFO
Ought to say , The hand tearing code link is in the interview process Both important and simple A part of , Compared with software jobs , Numbers IC Hand tear code Fixed topic , Limited number , It belongs to a link that must be scored in the whole interview , Outside this series , I also recommend numbers IC Job seekers use “HdlBits” Code Training
Links are as follows
HDLBits — Verilog Practice
Problem of automatic beverage machine
1. Use Verilog Design circuit , Complete the following functions : Each bottle of drink 1.5 element , You can only put in one coin at a time , Available input 0.5 And 1.0 Two kinds of coins , With change function .
Principle of automatic beverage selling machine
First , It is obvious that , This hand tearing code should be used State machine To complete
The distinction between States , We can classify according to the amount remaining in the beverage machine , Because there are only two kinds of coins ,0.5/1 element , therefore The state can be divided as follows
- IDLE: Reset state , Indicates that the balance in the beverage machine is 0 element
- s1: The balance of the beverage machine is 0.5 element
- s2: The balance in the beverage machine is 1 element
- s3: The balance in the beverage machine is 1.5 element ( Export drinks , No change )
- s4: The balance in the beverage set is 2 element ( Export drinks , Give change )
So for the input and output of this state machine
Input : Two of you input Represents the coin put ,input[1] Pulling up means investing one yuan ,input[0] Higher means investment 0.5 element , By default, only one coin can be inserted at a time .
Output :drink Represents the output of drinks ,coin Represents the output of coins .
Veilog Design
module drink_machine( clk ,rst_n, money,drink,coin);
input clk;
input rst_n;
input [1:0] money;
output drink;
output coin;
parameter IDLE = 3'd0, s1=3'd1 ,s2=3'd2, s3=3'd3,s4=3'd4;
reg [2:0] state,nstate;
[email protected](posedge clk or negedge rst_n)
begin
if(!rst_n)
state<=IDLE;
else
state<=nstate;
end
[email protected](*)
begin
case(state)
IDLE:nstate = money[1] ? s2 : (money[0] ? s1 :IDLE);
s1: nstate = money[1] ? s3 : (money[0] ? s2 : s1);
s2: nstate = money[1] ? s4 : (money[0] ? s3 : s2);
s3: nstate = money[1] ? s2 : (money[0] ? s1 :IDLE);
s4: nstate = money[1] ? s2 : (money[0] ? s1 :IDLE);
default nstate = IDLE;
endcase
end
assign drink = (state == s3 || state == s4)? 1:0;
assign coin = (state == s4)? 1:0;
endmodule
Testbench Design
module drink_machine_tb();
reg clk;
reg rst_n;
reg [1:0] money;
wire drink;
wire coin;
drink_machine u1 (.clk(clk),.rst_n(rst_n),.money(money),.drink(drink),.coin(coin));
always #5 clk = !clk;
always #10.001 money = {
$random} % 3;
initial
begin
clk = 0;
rst_n = 1;
#10
rst_n = 0;
#20
rst_n = 1;
#1000
$stop;
end
endmodule
Simulation results
from 20ns To 80ns In the process of , Cast Five cents a piece , One by one ,drink Output is 1.
Then , Cast a piece , Throw another piece ,drink Output is 1 At the same time coin Also output as 1
Other state jumps also meet expectations , Design establishment .
边栏推荐
- Why do job hopping take more than promotion?
- 麦趣尔砸了小众奶招牌
- npm run dev启动项目报错 document is not defined
- MySQL - transaction details
- Shake Sound poussera l'application indépendante de plantation d'herbe "louable", les octets ne peuvent pas oublier le petit livre rouge?
- Redistemplate common collection instructions opsforzset (VI)
- MySQL - 事务(Transaction)详解
- 跨分片方案 总结
- Aiko ai Frontier promotion (7.6)
- @Detailed differences among getmapping, @postmapping and @requestmapping, with actual combat code (all)
猜你喜欢
Summary of cross partition scheme
ViT论文详解
麦趣尔砸了小众奶招牌
967- letter combination of telephone number
Tiktok will push the independent grass planting app "praiseworthy". Can't bytes forget the little red book?
抖音將推獨立種草App“可頌”,字節忘不掉小紅書?
Internet News: Geely officially acquired Meizu; Intensive insulin purchase was fully implemented in 31 provinces
【深度学习】PyTorch 1.12发布,正式支持苹果M1芯片GPU加速,修复众多Bug
缓存更新策略概览(Caching Strategies Overview)
Why do job hopping take more than promotion?
随机推荐
Quick news: the flybook players' conference is held online; Wechat payment launched "education and training service toolbox"
Redistemplate common collection instructions opsforset (V)
3D face reconstruction: from basic knowledge to recognition / reconstruction methods!
对话阿里巴巴副总裁贾扬清:追求大模型,并不是一件坏事
C语言:#if、#def和#ifndef综合应用
Nodejs tutorial expressjs article quick start
Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
启动嵌入式间:资源有限的系统启动
for循环中break与continue的区别——break-完全结束循环 & continue-终止本次循环
968 edit distance
Seven original sins of embedded development
JPEG2000-Matlab源码实现
爬虫实战(五):爬豆瓣top250
What's the best way to get TFS to output each project to its own directory?
MySQL - transaction details
967- letter combination of telephone number
uni-app App端半屏连续扫码
mysql根据两个字段去重
袁小林:安全不只是标准,更是沃尔沃不变的信仰和追求
JS learning notes OO create suspicious objects