当前位置:网站首页>[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 .
边栏推荐
- Yyds dry inventory run kubeedge official example_ Counter demo counter
- ICML 2022 | flowformer: task generic linear complexity transformer
- 麦趣尔砸了小众奶招牌
- Is this the feeling of being spoiled by bytes?
- 代理和反向代理
- 数字化转型挂帅复产复工,线上线下全融合重建商业逻辑
- PostgreSQL 安装gis插件 CREATE EXTENSION postgis_topology
- 14年本科毕业,转行软件测试,薪资13.5K
- 袁小林:安全不只是标准,更是沃尔沃不变的信仰和追求
- C language char, wchar_ t, char16_ t, char32_ Relationship between T and character set
猜你喜欢
PostgreSQL 安装gis插件 CREATE EXTENSION postgis_topology
[in depth learning] pytorch 1.12 was released, officially supporting Apple M1 chip GPU acceleration and repairing many bugs
966 minimum path sum
jvm:大对象在老年代的分配
Seven original sins of embedded development
PostgreSQL 修改数据库用户的密码
【深度学习】PyTorch 1.12发布,正式支持苹果M1芯片GPU加速,修复众多Bug
中国白酒的5场大战
一行代码可以做些什么?
50 commonly used numpy function explanations, parameters and usage examples
随机推荐
Three schemes of SVM to realize multi classification
jvm:大对象在老年代的分配
JS get array subscript through array content
The underlying implementation of string
What about the spectrogram
对话阿里巴巴副总裁贾扬清:追求大模型,并不是一件坏事
R语言做文本挖掘 Part4文本分类
Redistemplate common collection instructions opsforzset (VI)
50 commonly used numpy function explanations, parameters and usage examples
Sdl2 source analysis 7: performance (sdl_renderpresent())
Torch Cookbook
红杉中国,刚刚募资90亿美元
2022 fields Award Announced! The first Korean Xu Long'er was on the list, and four post-80s women won the prize. Ukrainian female mathematicians became the only two women to win the prize in history
Study notes of grain Mall - phase I: Project Introduction
在最长的距离二叉树结点
JS learning notes OO create suspicious objects
968 edit distance
Fastjson parses JSON strings (deserialized to list, map)
ROS error: could not find a package configuration file provided by "move_base“
【力扣刷题】32. 最长有效括号