---
# System prepended metadata

title: 數位邏輯設計實習(作業4)

---

# 數位邏輯設計實習(作業4)

###### 

> <font size=5 color="#0080FF" face="微軟正黑體"><b>1410932050 資工2-1 魏庠緯 </b></font>
> <font size=5><b>Githuub網址:[Tommywei0628](https://github.com/Tommywei0628/homework4.git)</b></font>
# :memo:實驗目的
><font size=5 face="微軟正黑體"><b>設計上數 BCD to 7段顯示器並具有載入與同步清除功能。</b></font>
# :memo:實驗內容
:::info
:pushpin: <font size=5 face="微軟正黑體"><b>七段顯示器原理</b></font>
:::
>![](https://imgur.com/JCksXSt.png)
><font size=5 face="微軟正黑體">我們需要使用此七段顯示器來跟BCD做結合。</font>
# :memo:實驗步驟
><font size=5 face="微軟正黑體"><b>依照題目內容選寫出以下程式碼</b></font>
>>BCD.v 
```verilog=
module BCD(clk,rst_asyn,Load,Din,Q_out,Q);
input clk;
input rst_asyn,Load;
input [3:0]Din;
output [3:0]Q;
reg [3:0]Q;
output [6:0]Q_out;
reg [6:0]Q_out;

always@ (posedge clk)
begin

if (!rst_asyn)
    Q=0;
else if (Load)
    Q=Din;
else if (Q == 9)
    Q=0;
else
    Q+=1;
end

always@ (*)
begin
    case (Q)
        4'b0000 : Q_out = 7'b1000000;
        4'b0001 : Q_out = 7'b1111001;
        4'b0010 : Q_out = 7'b0100100;
        4'b0011 : Q_out = 7'b0110000;
        4'b0100 : Q_out = 7'b0011001;
        4'b0101 : Q_out = 7'b0010010;
        4'b0110 : Q_out = 7'b0000010;
        4'b0111 : Q_out = 7'b1111000;
        4'b1000 : Q_out = 7'b0000000;
        4'b1001 : Q_out = 7'b0010000;
        default : Q_out = 7'b0000000;
    endcase
end
endmodule


```
><font size=4 face="微軟正黑體"><b>這邊因為我還不是很熟悉如何使用呼叫檔案的方式所以直接把所有東西寫在一起，還有因為我注意到DP這個點沒有用到所以我乾脆就把他給去掉了。</b></font>
>>BCD_tb.v
```verilog=
module  BCD_tb;
  reg clk,rst_asyn,Load;
  reg [3:0]Din;
  wire [3:0]Q;
  wire [6:0]Q_out;
  parameter PERIOD=20;
  parameter real DUTY_CYCLE=0.5;
  parameter OFFSET=0;
initial begin
  #OFFSET;
  forever begin
    clk=1'b1;
    #(PERIOD-(PERIOD*DUTY_CYCLE)) clk=1'b0;
    #(PERIOD*DUTY_CYCLE);
  end
end
initial begin
  Din= 4'b0010;
  rst_asyn=1'b0;
  Load=1'b1;
  #5   rst_asyn=1'b1;
  #10  Load=1'b0;
  #50  rst_asyn=1'b0;
  #10  Load=1'b1;
  #5   rst_asyn=1'b1;
  #10  Load=1'b0;
  #200 $finish;
end
initial begin
$dumpfile("BCD.vcd");
  $dumpvars(0, BCD_tb);
end
  BCD BCD_tb(
    .clk(clk),
    .rst_asyn(rst_asyn),
    .Load(Load),
    .Din(Din),
    .Q_out(Q_out),
    .Q(Q)
  );
endmodule
```
><font size=4 face="微軟正黑體"><b>簡單的設計</b></font>
# :memo: 實驗結果
><font size=5 face="微軟正黑體"><b>make後出來的波型</b></font>
![](https://imgur.com/sp7yu7e.png)

# :memo: 實驗討論
><font face="微軟正黑體" size=5><b>這題目卡在檔案分開這個地方很久不知為何就是無法，所以最後才決定合在一起，而reset跟load這兩個功能也讓我苦思很久，最後還是詢問別人後才有了現在的解果。</b></font>
# :memo: 實驗心得
><font face="微軟正黑體" size=5><b>這次作業內容我有感覺到難度明顯跟之前的作業有點差距，真的又越來越難的感覺，但本身卻沒有排斥的感覺反而是越來越投入想要解決這個作業問題，在解決了問題後讓我有些許的成就感。