Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. module functionGenerator(Clk,data_out, freq, reg0, clk_out);
  2. //declare input and output
  3. input Clk;
  4. output [9:0] data_out;
  5. output reg clk_out;
  6. input [3:0] reg0;
  7. reg [31:0] constantNumber;
  8. reg [9:0] sine [0:99];
  9. integer i;
  10. reg [9:0] data_out;
  11. reg [31:0] count;
  12. //Initialize the sine rom with samples.
  13. initial begin
  14. i = 0;
  15. sine[0] = 0; sine[1] = 10; sine[2] = 20; sine[3] = 29; sine[4] = 39;
  16. sine[5] = 48; sine[6] = 58; sine[7] = 67; sine[8] = 75; sine[9] = 84;
  17. sine[10] = 92; sine[11] = 100; sine[12] = 107; sine[13] = 114; sine[14] = 120;
  18. sine[15] = 126; sine[16] = 132; sine[17] = 137; sine[18] = 141; sine[19] = 145;
  19. sine[20] = 149; sine[21] = 151; sine[22] = 153; sine[23] = 155; sine[24] = 156;
  20. sine[25] = 156;
  21.  
  22. end
  23.  
  24.  
  25. always @ (reg0)
  26. begin
  27. if(reg0 == 4'b0000)
  28. constantNumber = 50000000;
  29. else if(reg0 == 4'b0001)
  30. constantNumber = 100000000;
  31. else if(reg0 == 4'b0010)
  32. constantNumber = 50000000;
  33. else if(reg0 == 4'b0100)
  34. constantNumber = 25000000;
  35. else if(reg0 == 4'b1000)
  36. constantNumber = 12500000;
  37. else
  38. constantNumber = 50000000;
  39. end
  40.  
  41. always @ (posedge(Clk))
  42. begin
  43. if (count == constantNumber - 1)
  44. begin
  45. count <= 32'b0;
  46. end
  47. else
  48. begin
  49. count <= count + 1;
  50. end
  51. end
  52.  
  53. always @ (posedge(Clk))
  54. begin
  55. if (count == constantNumber - 1)
  56. clk_out <= ~clk_out;
  57. else
  58. clk_out <= clk_out;
  59. end
  60.  
  61. //At every positive edge of the clock, output a sine wave sample.
  62. always@ (clk_out)
  63. begin
  64. if ( i < 25 )
  65. data_out = sine[i];
  66. else if ( i < 50 )
  67. data_out = sine[50 - i];
  68. else if ( i < 75 )
  69. data_out = - sine[i - 50];
  70. else
  71. data_out = - sine[100 - i];
  72. i = i+ 1;
  73. if(i == 100)
  74. i = 0;
  75. end
  76. endmodule
  77.  
  78. module functionGeneratror_tb();
  79.  
  80. // Inputs
  81. reg Clk;
  82. reg reg0;
  83. wire clk_out;
  84. // Outputs
  85. wire [9:0] data_out;
  86.  
  87. // Instantiate the Unit Under Test (UUT)
  88. functionGenerator uut (
  89. .Clk(Clk),
  90. .data_out(data_out),
  91. .reg0(reg0),
  92. .clk_out(clk_out)
  93.  
  94. );
  95.  
  96. //Generate a clock with 10 ns clock period.
  97. initial
  98. begin
  99. Clk = 0;
  100. reg0 = 4'b0000;
  101. end
  102. always #5 Clk = ~Clk;
  103.  
  104. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement