---
# System prepended metadata

title: Untitled

---

#**實作：設計Pseudo Random Pattern Generator具有同步正準位設定的功能，當設定時，輸出為110~2~ ，並撰寫testbench。**
###### 班級：資工二一 學號：1410932049 姓名：鍾宏昌
---
## 設計思路
直接將D flip flop 更改，將enable啟動後的輸出設為二進位數110，並讓輸出q的值函數($random)+d。

## 程式碼
### PRPG.v
```verilog=
module PRPG (
  input      clk,
  input      rst_n,
  input      en,
  input  [2:0]d,
  output reg  [2:0]q
);

always@(posedge clk or negedge rst_n)
  if (!rst_n)
    q <= #1 3'b110;
  else if (en)
    q <= #1 $random+d;
   
endmodule
```
### PRPG_tb.v(testbench)
```verilog=
module PRPG_tb;
reg clk;
reg rst_n;
reg en;
reg [2:0]d;
parameter PERIOD = 20;
parameter real DUTY_CYCLE = 0.5;
parameter OFFSET = 0;

initial begin
    #OFFSET;
    forever begin
        clk = 1'b0;
        #(PERIOD-(PERIOD*DUTY_CYCLE)) clk = 1'b1;
        #(PERIOD*DUTY_CYCLE);
    end
end

initial begin
    #10 rst_n=1;
    #10 rst_n=0;
    #10 rst_n=1;
end

initial begin
    #5 en=1;
    #5 en=0;
    #5 en=1;
end

initial begin
    d=3'b000;
    #20 d=3'b001;
    #20 d=3'b010;
    #100 $finish;
end

initial begin
    $dumpfile("PRPG.vcd");
    $dumpvars(0, PRPG_tb);
end

PRPG PRPG_tb(
    .clk(clk),
    .rst_n(rst_n),
    .en(en),
    .d(d)
);
endmodule

```

## 波形圖
### PRPG.vcd
![](https://i.imgur.com/dUn9stl.png)

## 心得
我感覺我有比較成長了，至少這次我沒有遇到難點從而花費過多時間，雖然我想可能只是這次的題目比較簡單，或許下次只要再難一點，我說不定會寫不出來。

## 程式碼存放處
https://github.com/s1410932049/HW5

## 參考資料
http://yhhuang1966.blogspot.com/2019/06/latch-flip-flop.html
https://www.cnblogs.com/oomusou/archive/2008/08/09/1264292.html
https://blog.csdn.net/sdvch/article/details/9037497