当前位置:网站首页>Développement d'un module d'élimination des bavardages à clé basé sur la FPGA
Développement d'un module d'élimination des bavardages à clé basé sur la FPGA
2022-07-06 03:49:00 【FPGA et MATLAB】
1.Version logicielle
QUARTUSII8.1
Modelsim6.5d
2.Code source du système
module tops(
i_clk, //100M
i_rst, //Fonction de Réinitialisation du système,Réinitialisation de haut niveau,Si vous n'utilisez pas cet angle,Donc un niveau direct bas suffit
i_input1, //Entrée de la clé1
i_input2, //Entrée de la clé2
o_output1,//Sortie d'impulsion1
o_output2,//Sortie d'impulsion2
test_cnt1,//Compteur d'essai1
test_cnt2,//Compteur d'essai2
test_enable1,//Tester le signal d'activation
test_enable2 //Tester le signal d'activation
);
//100Mégal à10ns,Alors...1sLe milieu est10_000_000- Oui.100MCycle d'horloge
//Lors de la simulation,Pour faciliter la visualisation des résultats de la simulation,Donc10_000_000Remplacer par une valeur plus petite10_000
//parameter NUM = 32'd10000000; //Utilisation pratique
parameter NUM = 32'd100; //Pour la simulation
input i_clk;//100MPour10ns
input i_rst;
input i_input1;
input i_input2;
output o_output1;
output o_output2;
output[31:0]test_cnt1;
output[31:0]test_cnt2;
output test_enable1;
output test_enable2;
reg o_output1 = 1'b0;
reg o_output2 = 1'b0;
reg test_enable1 = 1'b0;
reg test_enable2 = 1'b0;
reg[31:0]cnt1 = 32'd0;
reg[31:0]cnt2 = 32'd0;
reg flag1 = 1'b1;
reg flag2 = 1'b1;
always @(posedge i_clk or posedge i_rst)// Processus principal de traitement
begin
if(i_rst)//Réinitialisation du système
begin
test_enable1 <= 1'b0;// Définir le signal d'activation
test_enable2 <= 1'b0;// Définir le signal d'activation
cnt1 <= 32'd0;
cnt2 <= 32'd0;
flag1 <= 1'b1;
flag2 <= 1'b1;
end
else begin
if(i_input1 == 1'b0 & i_input2 == 1'b1 & flag1 == 1'b1)//Appuyez sur la touche1, Sans appuyer sur la touche 2
begin
//1s L'horloge permet de maintenir 10_000_000Cycles d'horloge
cnt2 <= 32'd0;
if(cnt1 < NUM)//Non.1s
begin
cnt1 <= cnt1 + 32'd1;
test_enable1 <= 1'b1;//Produits1Impulsions,//Après avoir appuyé sur le bouton,En cours1sHorloge
test_enable2 <= 1'b0;
flag1 <= 1'b1;// Pour bloquer le deuxième bouton
flag2 <= 1'b0;// Pour bloquer le deuxième bouton
end
if(cnt1 == NUM)//À1s,Arrêter la sortie
begin
cnt1 <= cnt1;
test_enable1 <= 1'b0;
test_enable2 <= 1'b0;
flag1 <= 1'b1;
flag2 <= 1'b1;
end
end
if(i_input1 == 1'b1 & i_input2 == 1'b0 & flag2 == 1'b1)//Appuyez sur la touche2, Sans appuyer sur la touche 1
begin
//50s L'horloge permet de maintenir
cnt1 <= 32'd0;
if(cnt2 < 50*NUM)//Non.50s
begin
cnt2 <= cnt2 + 32'd1;
test_enable1 <= 1'b0;//Produits1Impulsions,//Après avoir appuyé sur le bouton,En cours1sHorloge
test_enable2 <= 1'b1;
flag1 <= 1'b0;// Utilisé pour bloquer les 1Les boutons
flag2 <= 1'b1;// Utilisé pour bloquer les 1Les boutons
end
if(cnt2 == 50*NUM)//À1s,Arrêter la sortie
begin
cnt2 <= cnt2;
test_enable1 <= 1'b0;
test_enable2 <= 1'b0;
flag1 <= 1'b1;
flag2 <= 1'b1;
end
end
if(i_input1 == 1'b1 & i_input2 == 1'b1)// Il n'y a pas d'opération clé
begin
cnt1 <= 32'd0;
cnt2 <= 32'd0;
end
end
end
assign test_cnt1 = cnt1;
assign test_cnt2 = cnt2;
// Voici le signal d'énergie ,Impulsion de sortie
// Définir deux compteurs d'impulsions
reg[31:0]pcnt1 = 32'd0;
reg[31:0]pcnt2 = 32'd0;
always @(posedge i_clk or posedge i_rst)// Processus principal de traitement
begin
if(i_rst)//Réinitialisation du système
begin
pcnt1 <= 32'd0;
pcnt2 <= 32'd0;
o_output1 <= 1'b0;
o_output2 <= 1'b0;
end
else begin
if(test_enable1 == 1'b1)//1s One inside 100nsImpulsions,C'est - à - dire:1s Il y a un 10MLe signal d'impulsion de
begin
pcnt1 <= pcnt1 + 32'd1;
if(pcnt1 < 32'd10)
begin
o_output1 <= 1'b1;//Produire100nsSignal de
end
else begin
o_output1 <= 1'b0;
end
end
else begin
pcnt1 <= 32'd0;
o_output1 <= 1'b0;
end
if(test_enable2 == 1'b1)//50sIntérieur50- Oui.100nsImpulsions,C'est - à - dire:1s Il y a un 10MLe signal d'impulsion de
begin
if(pcnt2 == NUM-1)
begin
pcnt2 <= 32'd0;
end
else begin
pcnt2 <= pcnt2 + 32'd1;
end
if(pcnt2 < 32'd10)
begin
o_output2 <= 1'b1;//Produire100nsSignal de
end
else begin
o_output2 <= 1'b0;
end
end
else begin
pcnt2 <= 32'd0;
o_output2 <= 1'b0;
end
end
end
endmodule
3.Conclusion de la simulation
QII Avec des instructions de simulation :
Nous avons agrandi localement la forme d'onde :
Première partie,Je vois.input1Est élevé,input2Faible,Description2C'est pressé.,Alors...output2 Produire des 50Impulsions.
Deuxième partie,input1Faible, La première touche est pressée , Il n'y a donc qu'un seul signal de haut niveau
Partie III, C'est toujours le premier bouton qui a été appuyé , Donc une seule impulsion est générée .
Modelsim Description de la simulation :
Nous avons agrandi localement la simulation :
Une fois la clé enfoncée :
La clé 2 est pressée ;
Ou la clé 2 est pressée .
A35-09
边栏推荐
- C language -- structs, unions, enumerations, and custom types
- [meisai] meisai thesis reference template
- Why do you want to start pointer compression?
- 【FPGA教程案例11】基于vivado核的除法器设计与实现
- 【FPGA教程案例12】基于vivado核的复数乘法器设计与实现
- 登录mysql输入密码时报错,ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO/YES
- Pandora IOT development board learning (HAL Library) - Experiment 9 PWM output experiment (learning notes)
- Take you to wechat applet development in 3 minutes
- Plus d'un milliard d'utilisateurs de grandes entreprises comme Facebook ont été compromis, il est temps de se concentrer sur le did
- Quick sort function in C language -- qsort
猜你喜欢
2.2 STM32 GPIO operation
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
C (thirty) C combobox listview TreeView
1、工程新建
Serial port-rs232-rs485-ttl
How do we make money in agriculture, rural areas and farmers? 100% for reference
Record the process of reverse task manager
C language circular statement
Cubemx 移植正点原子LCD显示例程
1. New project
随机推荐
Align items and align content in flex layout
Brush questions in summer -day3
MySQL reads missing data from a table in a continuous period of time
2.2 STM32 GPIO操作
LTE CSFB test analysis
SWC introduction
Conditionally [jsonignore]
[practice] mathematics in lottery
Error 1045 (28000): access denied for user 'root' @ 'localhost' (using password: no/yes
Cf603e pastoral oddities [CDQ divide and conquer, revocable and search set]
[slam] lidar camera external parameter calibration (Hong Kong University marslab) does not need a QR code calibration board
[Qt5] QT QWidget immediately appears and disappears
Facebook等大厂超十亿用户数据遭泄露,早该关注DID了
Take you to wechat applet development in 3 minutes
Pytorch基础——(2)张量(tensor)的数学运算
User perceived monitoring experience
Data analysis Seaborn visualization (for personal use)
Quick sort function in C language -- qsort
Flask learning and project practice 8: introduction and use of cookies and sessions
Suggestions for new engineer team members