2020年2月8日 星期六

Verilog 硬體描述語言 HDL Ch08 d_latch_ff.v D型栓鎖器與正反器 Ch08 dff_1.v D型正反器與控制信號 Ch08 dff_2.v 控制信號優先權

Verilog 硬體描述語言 HDL
Ch08 d_latch_ff.v  D型栓鎖器與正反器
Ch08 dff_1.v       D型正反器與控制信號
Ch08 dff_2.v       控制信號優先權

//需 Import  pin assignments  DE2_115_pin_assignments


//=====================================================
//Verilog 硬體描述語言 HDL
// Ch08 d_latch_ff.v  D型栓鎖器與正反器
// Ch08 dff_1.v       D型正反器與控制信號
// Ch08 dff_2.v       控制信號優先權
//=====================================================
//需 Import  pin assignments  DE2_115_pin_assignments

module D_FF (
  input  CLOCK_50, // 50 MHz clock
  input  [3:0] KEY,      // Pushbutton[3:0]
  input  [17:0] SW, // Toggle Switch[17:0]
  output [6:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,HEX6,HEX7,  // Seven Segment Digits
  output [8:0] LEDG,  // LED Green
  output [17:0] LEDR   // LED Red
 );
 // blank unused 7-segment digits
assign HEX0 = 7'b111_1111;
assign HEX1 = 7'b111_1111;
assign HEX2 = 7'b111_1111;
assign HEX3 = 7'b111_1111;
assign HEX4 = 7'b111_1111;
assign HEX5 = 7'b111_1111;
assign HEX6 = 7'b111_1111;
assign HEX7 = 7'b111_1111;

//assign LEDR=SW;
// Setup clock divider
//wire [6:0] myclock;
/*
 divide_by_50 d6(clk_1Mhz,CLK,RST);
 divide_by_10 d5(clk_100Khz,clk_1Mhz,RST);
 divide_by_10 d4(clk_10Khz,clk_100Khz,RST);
 divide_by_10 d3(clk_1Khz,clk_10Khz,RST);
 divide_by_10 d2(clk_100hz,clk_1Khz,RST);
 divide_by_10 d1(clk_10hz,clk_100hz,RST);
 divide_by_10 d0(clk_1hz,clk_10hz,RST);
*/

//clock_divider cdiv(CLOCK_50,KEY[3],myclock);
//module clock_divider(CLK,RST,clock);


d_latch_ff(KEY[0], SW[3:0],LEDG[3:0] , LEDG[7:4]);
//module d_latch_ff(Clk, D, Q_l, Q_ff);
//input  Clk; // 一位元輸入
//input  [3:0] D; // 四位元輸入
//output [3:0] Q_l,Q_ff;// 四位元輸出 


dff_1 (SW[4],SW[5],SW[6],SW[7],SW[8],SW[9],SW[10],LEDR[1],LEDR[2],LEDR[3],LEDR[4]);
//module dff_1 (Clk,D,Din,Clr1,clr2,Pre,Load,Q1,Q2,Q3,Q4);
//input  Clk,D,Din,Clr1,Clr2,Pre,Load; // 一位元輸入
//output Q1,Q2,Q3,Q4; // 一位元輸出 

dff_2 (SW[11],SW[12],SW[13],SW[14],SW[15],SW[16],LEDR[17]);
//module dff_2 (Clk,D,Din,Clr,Pre,Load,Q);
//input  Clk,D,Din,Clr,Pre,Load; // 一位元輸入
//output Q; // 一位元輸出 

endmodule

//==================================================
// Ch08 d_latch_ff.v
// D 型栓鎖器與正反器

module d_latch_ff(Clk, D, Q_l, Q_ff);
input  Clk; // 一位元輸入
input  [3:0] D; // 四位元輸入
output [3:0] Q_l,Q_ff; // 四位元輸出 
reg    [3:0] Q_l,Q_ff; // 宣告為暫存器資料

// D 型栓鎖器, 高準位觸發
always@ (Clk or D) // 當 Clk 或 D 信號改變時,執行以下敘述
  if (Clk)   Q_l = D; // 當 Clk 為高準位時,D 的值存入 Q_l 中

// D 型正反器, 上緣觸發
always@ (posedge Clk) // 當 Clk 上緣觸發時,執行以下敘述
  Q_ff = D; // D 的值存入 Q_ff 中

endmodule

//==================================================

// Ch08 dff_1.v
// D 型正反器與控制信號
//dff_1 dff_1 (SW[4],SW[5],SW[6],SW[7],SW[8],SW[9],SW[10],LEDR[1],LEDR[2],LEDR[3],LEDR[4]);
//Clk =SW[4]   D=SW[5]
//Din= SW[6] , Clr1=SW[7],Clr2=SW[8]
//Pre=SW[9] Load=SW[10]
//{Q1,Q2,Q3,Q4}= LEDR[1],LEDR[2],LEDR[3],LEDR[4]);
//========================================================
module dff_1 (Clk,D,Din,Clr1,Clr2,Pre,Load,Q1,Q2,Q3,Q4);
input  Clk,D,Din,Clr1,Clr2,Pre,Load; // 一位元輸入
output Q1,Q2,Q3,Q4; // 一位元輸出 
reg    Q1,Q2,Q3,Q4; // 宣告為暫存器資料


//Clk= SW[4] Clr1=SW[7]
// 上緣觸發時脈, 上緣同步清除
always@ (posedge Clk) // 同步清除, 無須列出
  if (!Clr1)  Q1 = 0; // 上緣觸發, Clr1  , 
  else       Q1 = D;


//Clk =SW[4] i  Clr2=SW[8]
// 上緣觸發時脈, 上緣非同步清除
always@ (posedge Clk or posedge Clr2)  // 非同步清除, 必須列出
  if (Clr2)   Q2 = 0; // 上緣觸發, Clr2
  else        Q2 = D;

// 下緣觸發時脈, 下緣非同步預置
//Clk =SW[4] i  Pre=SW[9]
always@ (negedge Clk or negedge Pre)  // 非同步預置, 必須列出
  if (!Pre)   Q3 = 1; // 下緣觸發, !Pre
  else        Q3 = D;

// 下緣觸發時脈, 下緣同步載入
//Clk =SW[4] Din=SW[6] Load=SW[10]
always@ (negedge Clk)   // 同步載入, 無須列出
  if (!Load)  Q4 = Din; // 下緣觸發, !Load
  else       Q4 = D;

endmodule

//==================================================
//控制信號優先權
//Ch08 dff_2.v
//=================================================
module dff_2 (Clk,D,Din,Clr,Pre,Load,Q);
//=================================================
//dff_2 (SW[11],SW[12],SW[13],SW[14],SW[15],SW[16],LEDR[17]);
//Clk = SW[11] ,D=SW[12] ,Din=SW[13]
//Clr=SW[14],Pre=SW[15],Load=SW[16],Q=LEDR[17]
//=================================================
input  Clk,D,Din,Clr,Pre,Load; // 一位元輸入
output Q; // 一位元輸出 
reg    Q; // 宣告為暫存器資料

// 上緣觸發時脈,   上緣非同步清除
// 下緣非同步預置, 下緣同步載入
always@ (posedge Clk or posedge Clr or negedge Pre) 
  if (Clr)         Q = 0; // 最高優先權
  else if (!Pre)   Q = 1; // 第二優先權
  else if (!Load)  Q = Din; // 第三優先權
  else             Q = D;

endmodule



沒有留言:

張貼留言

WOKWI LED + MQTT Node-Red SQLite

WOKWI LED + MQTT Node-Red SQLite const char *mqtt_broker = "broker.mqtt-dashboard.com" ; const char *topic1 = "alex9ufo/e...