實(shí)驗(yàn)15:環(huán)形計(jì)數(shù)器

 行業(yè)動(dòng)態(tài)     |      2023-10-12 08:59:31    |      作者

實(shí)驗(yàn)?zāi)康?/strong>

(1)熟悉和掌握FPGA開(kāi)發(fā)流程和Lattice Diamond軟件使用方法;

(2)通過(guò)實(shí)驗(yàn)理解和掌握環(huán)形計(jì)數(shù)器原理;

(3)學(xué)習(xí)用Verilog HDL行為級(jí)描述時(shí)序邏輯電路。

實(shí)驗(yàn)任務(wù)

設(shè)計(jì)一個(gè)4位右循環(huán)一個(gè)1的環(huán)形計(jì)數(shù)器。

實(shí)驗(yàn)原理

將移位寄存器的輸出q0連接到觸發(fā)器q3的輸入,并且在這4個(gè)觸發(fā)器中只有一個(gè)輸出為1,另外3個(gè)為0,這樣就構(gòu)成了一個(gè)環(huán)形計(jì)數(shù)器。初始化復(fù)位時(shí),給q0一個(gè)置位信號(hào),則唯一的1將在環(huán)形計(jì)數(shù)器中循環(huán)移位,每4個(gè)時(shí)鐘同期輸出一個(gè)高電平脈沖。

Verilog HDL建模描述

用行為級(jí)描述帶有復(fù)位的移位寄存器

用于Diamond仿真的程序清單 ring.v

module ring #

(

parameter CNT_SIZE = 8

)

(

input wire clk,rst, //時(shí)鐘和復(fù)位輸入

output reg [CNT_SIZE-1:0] cnt //計(jì)數(shù)器輸出);always@(posedge clk)

if(!rst)

cnt <= 8'b0000_0001; //復(fù)位初值

else

cnt <= {cnt[0],cnt[CNT_SIZE-1:1]}; //右移循環(huán)計(jì)數(shù)

endmodule

仿真文件ring_tb.v

`timescale 1ns/100ps //仿真時(shí)間單位/時(shí)間精度

module ring_tb;

reg clk,rst;

wire [7:0] q;

initial

begin

clk =0;

rst =0;

#20

rst =1;

end

always#10 clk =~clk;

ring u1 (

.clk (clk),

.rst (rst),

.cnt (q)

);

endmodule

實(shí)驗(yàn)步驟

打開(kāi)Lattice Diamond,建立工程。

新建Verilog HDL設(shè)計(jì)文件,并鍵入設(shè)計(jì)代碼。

根據(jù)仿真教程,實(shí)現(xiàn)對(duì)本工程的仿真,驗(yàn)證仿真結(jié)果是否與預(yù)期相符。

仿真結(jié)果和實(shí)驗(yàn)現(xiàn)象