1. 程式人生 > >實驗課作業:用verilog實現密碼鎖

實驗課作業:用verilog實現密碼鎖

     剛開始學習verilog,自己寫了個密碼鎖,看上去有不少bug,不過在老師那裡過關了,是自己的第一個獨立完成的verilog程式,試著發個部落格記錄下,同樣也是第一次發部落格。

     下面貼程式碼,先是消抖部分:

module mimasuo(clk,key_in,led,rst,led_test);
input clk;
input [3:0] key_in;
input rst;
output [2:0]led;
output [2:0]led_test;
reg [23:0] count;
reg [3:0] key_scan;
[email protected](posedge clk or negedge rst)
begin
    if(rst)
        count <= 24'd0;
    else begin
    if(count == 24'd3999999)
        begin 
            count <= 24'b0;
            key_scan <= key_in;
        end
        else
            count <= count + 24'b1;
          end
end

reg [3:0] key_scan_r;
[email protected]
(posedge clk) key_scan_r <= key_scan; wire [3:0] flag_key = key_scan_r[3:0] & (~key_scan[3:0]);
     之後是狀態機:
reg [3:0] ouut;
[email protected](posedge clk or negedge rst)
begin
    if(rst)
    ouut <= 4'b0000;
    else begin if(flag_key[0])
        ouut[0] <= 1;
        if(flag_key[1])
                ouut[1] <= 1;
        if(flag_key[2])
                ouut[2] <= 1;
        if(flag_key[3])
                ouut[3] <= 1;
        end
end 
reg [2:0] led_temp;
reg [32:0] cnt;
reg [2:0] led_test_output; 
parameter s0 = 3'd7,s1 = 3'd6,s2 = 3'd4,s3 = 3'd0,s4 = 3'd5;  
[email protected]
(posedge clk) begin if(rst) begin led_test_output <= 0; led_temp <= s0; cnt <= 0; end else begin if(ouut[0]) begin cnt <= cnt +1; if (cnt == 32'd199999999) begin led_temp <= s4; cnt <= 0; end else begin case(led_temp) s0:begin if(ouut[1]) begin led_temp <= s1; end else begin led_temp <= s0; end end s1:begin if(ouut[2]) begin led_temp <= s2; end else begin led_temp <= s0; end end s2:begin if(ouut[3]) begin led_temp <= s3; end else begin led_temp <= s0; end end s3:begin if(flag_key[1]) led_test_output[0] <= ~led_test_output[0]; if(flag_key[2]) led_test_output[1] <= ~led_test_output[1]; if(flag_key[3]) led_test_output[2] <= ~led_test_output[2]; end s4:begin led_temp <= s4; end endcase end end end end assign led[0] = led_temp[0]; assign led[1] = led_temp[1]; assign led[2] = led_temp[2]; assign led_test[0] = led_test_output[0]; assign led_test[1] = led_test_output[1]; assign led_test[2] = led_test_output[2]; endmodule
     下面是激勵程式碼:
module mimasuot;
    reg clk;
    reg [3:0]key_in;
    reg rst;
    wire [2:0]led;
    wire [2:0]led_test;
    mimasuo uut(
                .clk(clk),
                .key_in(key_in),
                .rst(rst),
                .led(led),
                .led_test(led_test)
                );
initial begin
    clk = 1;
    forever #25 clk = ~clk;
        end 
 
initial begin
    rst = 1;
    #100;
    rst = 0;
    key_in = 4'b0000;
    #100;
    key_in = 4'b0001;
    #200000000;
    key_in = 4'b0000;
    #10000;
    key_in = 4'b0010;
    #200000000;
    key_in = 4'b0000;
        #10000;
    key_in = 4'b0100;
    #200000000;
    key_in = 4'b0000;
        #10000;
    key_in = 4'b1000;
    #200000000;
    key_in = 4'b0000;
        #10000;
    key_in = 4'b0010;
        #200000000;
    key_in = 4'b0100;
        #200000000;
    key_in = 4'b0000;
    #200000000;
    $stop;
    end   
endmodule
     再貼個模擬圖:


模擬是用vivado自帶的模擬軟體做的,modelsim做需要斷網才行,這個問題試了好多辦法都沒解決,只好用vivado自帶的。這個是個比較簡單明瞭的程式,所以也沒寫什麼解釋,不過用來解決大作業足矣。

     後面準備學習DDR3和eMMC的除錯,這個就算是上手訓練吧。

相關推薦

實驗作業verilog實現密碼鎖

     剛開始學習verilog,自己寫了個密碼鎖,看上去有不少bug,不過在老師那裡過關了,是自己的第一個獨立完成的verilog程式,試著發個部落格記錄下,同樣也是第一次發部落格。     下面貼程式碼,先是消抖部分:module mimasuo(clk,key_in,

作業2Verilog語言實現二十進位制計數器

1.新建一個工程,並且加入一個Verilog-HDL檔案,參考例程中的程式碼編寫Verilog語言,編寫完成後如下圖所示 編譯後,檢視RTL檔案如下圖所示 建立VWF檔案,新增模擬訊號後觀察模擬結果如下圖

吳恩達深度學習課程第二第一週第一次作業神經網路簡單預測結果

# coding: utf-8 # # Initialization # Welcome to the first assignment of "Improving Deep Neural Networks". # # Training your neural

機器學習實驗(四)tensorflow實現卷積神經網路識別人類活動

在近幾年,越來越多的使用者在智慧手機上安裝加速度感測器等一些裝置,這就為做一些應用需要收集相關的資料提供了方便。人類活動識別(human activity recognition (HAR))是其中的一個應用。對於HAR,有很多的方法可以去嘗試,方法的performance很大程度上依賴於特徵工程。傳統的機

最課程階段大作業03半天實現淘寶首頁?

       每一個在最課程學習的學生,到了最後幾乎都會來問我一個問題:老師,是不是實際的開發中,都會有一個前端開發工程師,把靜態頁面做好了,然後才交給我們後臺開發啊?        我只能說:你想多了。        我知道你這麼問的意思,HTML+CSS+各類前端框架學習起來太繁瑣了,是不是就沒有

跟著吳恩達學深度學習Scala實現神經網路-第二Scala實現多層神經網路

上一章我們講了如何使用Scala實現LogisticRegression,這一張跟隨著吳恩達的腳步我們用Scala實現基礎的深度神經網路。順便再提一下,吳恩達對於深度神經網路的解釋是我如今聽過的最清楚的課,感嘆一句果然越是大牛知識解釋得越清晰明瞭。 本文分為以下四個部分。

跟著吳恩達學深度學習Scala實現神經網路-第一

1.         Introduction        2017年8月,前百度首席科學家吳恩達先生在twitter上宣佈自己從百度離職後的第一個動作:在Coursera上推出一門從零開始構建神經網路的Deep Learning課程,一時間廣為轟動。       

小練習socket實現Linux和Windows之間的通信

ren argc 漏洞 markdown tex sockets acc sas -m 在日常生活中,絕大部分人使用的機器通常是windows系統,可是對於研發人員,開發、編譯等工作往往是建立在linux機器上。其實。在服務器方面,Linux、UNIX和

第三次作業戶體驗分析: 以 “南通大學教務管理系統微信公眾號” 為例

大學 nbsp 系統 關註 jpg dba back nav 推送 優點項目 1..給用戶及時快速反饋 能夠及時準確的推送四六級的相關消息等 2必要的提示和幫助文檔 在關註公眾號過後,會有相關教程和提示,能夠了解到如何使用該公眾號 3.Visual Clarity,

作業python編寫戶名密碼輸入接口程序

pan 超過 div times += gpo print have int count = 0while count <3: username = input("username:") password = input("password:") ‘

案例python實現翻譯小程序

luchangshan5200案例:翻譯小程序 #實現一個翻譯小程序 #1 可以查詢單詞 #2 可以自定義補充單詞解釋 #3 可以刪除某個單詞 print(‘歡迎來到大寶dayday見小詞典‘.center(30,‘-‘)) orig_dict = {‘中文‘:‘chinese‘,‘代碼‘:‘code‘,‘

第一次作業使用java實現word count

proc ref 存儲 num idt command 一個 stat n) github項目地址: https://github.com/changrui520/homework 作業要求: 可執行程序命名為:wc.exe。 該程序處理用戶需求的模式為:wc.exe

DLL注入CreateRemoteThread實現DLL注入

實驗環境:WINXP VS2010 功能:注入到notepad.exe程式,並從網上下一個檔案 實驗程式: (一)myhack.dll,即要注入的dll程式 #include "windows.h" #include "tchar.h" #pragma comment(lib,"url

類方法實現python實現一個簡單的單詞本,添加/查找/刪除單詞。

end code div keys style 成功 move print utf 1.實現一個簡單的單詞本,功能: ①添加單詞,當所添加的單詞已存在時,讓用戶知道 ②查找單詞,當查找的單詞不存在時,讓用戶知道 ③刪除單詞,當刪除的單詞不存在時,讓用戶知道 以上

基於硬體的C(C++)語言程式設計教程12函式實現2數之和

本系列文章希望探討以硬體為平臺講述C(C++)知識的一個新的途徑,改變目前大多數C語言教程僅注重C語言本身的語法規則,而脫離其應用環境的現狀。希望讀者通過本教程的學習,能夠立刻學以致用,真正將所學知識應用到專案實踐中。 開發環境:Atmel Studio 7.0 硬體平臺:Microch

練習三十二python實現:按相反的順序輸出列表的每一位值

用python實現:按相反的順序輸出列表的每一位值 1. 使用list[::-1] 1 list1 = ["one","two","three","four"] 2 for i in list1[::-1]:#list[::-1]結果為列表的反向 3 print(i) 2. 使用l

機器學習實戰nodejs實現人臉識別

機器學習實戰:用nodejs實現人臉識別   在本文中,我將向你展示如何使用face-recognition.js執行可靠的人臉檢測和識別 。 我曾經試圖找一個能夠精確識別人臉的Node.js庫,但是

實戰Python實現隨機森林

因為有Scikit-Learn這樣的庫,現在用Python實現任何機器學習演算法都非常容易。實際上,我們現在不需要任何潛在的知識來了解模型如何工作。雖然不需要了解所有細節,但瞭解模型如何訓練和預測對工作仍有幫助。比如:如果效能不如預期,我們可以診斷模型或當我們想要說服其他人使用我們的模型時,我們可以向他們解

Python每日一題第4題Python實現斐波那契數列

這是Python之禪和他朋友們在知識星球的第4題:用Python實現斐波那契數列 斐波那契數列(Fibonacci)最早由印度數學家Gopala提出,而第一個真正研究斐波那契數列的是義大利數學家 Leonardo Fibonacci,斐波那契數列的定義很簡單,用數學函式可表示為: 數列從0

Verilog實現接受0.5元,1元的可樂售賣機,單價2.5元,考慮找零和出貨。

第一步:畫出原理圖 第二步,將畫出的原理圖利用硬體語言實現 module fsm_cola_ctrl( input wire sclk, input wire rst_n, input wire [1:0]pi_money, output reg po_col