Signal generators are working. Tested on TestBench
This commit is contained in:
+23
-6
@@ -40,8 +40,8 @@ module top_tb();
|
|||||||
|
|
||||||
reg clk = 1'b0;
|
reg clk = 1'b0;
|
||||||
reg reset = 1'b0;
|
reg reset = 1'b0;
|
||||||
reg [3:0] sw = 4'b0000;
|
reg [3:0] sw = 4'b0001;
|
||||||
reg start = 1'b0;
|
reg start = 1'b1;
|
||||||
reg up = 1'b0;
|
reg up = 1'b0;
|
||||||
|
|
||||||
// 50% duty cycle clock
|
// 50% duty cycle clock
|
||||||
@@ -57,14 +57,31 @@ top Test_Unit(
|
|||||||
);
|
);
|
||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
start = 1;
|
|
||||||
up = 1;
|
|
||||||
#1_000_000;
|
#1_000_000;
|
||||||
$display("*");
|
$display("*");
|
||||||
#1_000_000;
|
#1_000_000;
|
||||||
$display("*");
|
$display("*");
|
||||||
start = 0;
|
#1_000_000;
|
||||||
up = 0;
|
$display("*");
|
||||||
|
#1_000_000;
|
||||||
|
$display("*");
|
||||||
|
#1_000_000;
|
||||||
|
$display("*");
|
||||||
|
#1_000_000;
|
||||||
|
start = 1'b0;
|
||||||
|
$display("*");
|
||||||
|
#1_000_000;
|
||||||
|
$display("*");
|
||||||
|
#1_000_000;
|
||||||
|
$display("*");
|
||||||
|
#1_000_000;
|
||||||
|
$display("*");
|
||||||
|
#1_000_000;
|
||||||
|
$display("*");
|
||||||
|
#1_000_000;
|
||||||
|
$display("*");
|
||||||
|
#1_000_000;
|
||||||
|
$display("*");
|
||||||
#1_000_000;
|
#1_000_000;
|
||||||
$display("*");
|
$display("*");
|
||||||
#1_000_000;
|
#1_000_000;
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
#
|
||||||
|
# Copyright (C) 1991-2015 Altera Corporation. All rights reserved.
|
||||||
|
# Your use of Altera Corporation's design tools, logic functions
|
||||||
|
# and other software and tools, and its AMPP partner logic
|
||||||
|
# functions, and any output files from any of the foregoing
|
||||||
|
# (including device programming or simulation files), and any
|
||||||
|
# associated documentation or information are expressly subject
|
||||||
|
# to the terms and conditions of the Altera Program License
|
||||||
|
# Subscription Agreement, the Altera Quartus II License Agreement,
|
||||||
|
# the Altera MegaCore Function License Agreement, or other
|
||||||
|
# applicable license agreement, including, without limitation,
|
||||||
|
# that your use is for the sole purpose of programming logic
|
||||||
|
# devices manufactured by Altera and sold by Altera or its
|
||||||
|
# authorized distributors. Please refer to the applicable
|
||||||
|
# agreement for further details.
|
||||||
|
#
|
||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
#
|
||||||
|
# Quartus II 64-Bit
|
||||||
|
# Version 15.0.0 Build 145 04/22/2015 SJ Web Edition
|
||||||
|
# Date created = 22:16:23 March 21, 2018
|
||||||
|
#
|
||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
|
||||||
|
QUARTUS_VERSION = "15.0"
|
||||||
|
DATE = "22:16:23 March 21, 2018"
|
||||||
|
|
||||||
|
# Revisions
|
||||||
|
|
||||||
|
PROJECT_REVISION = "dds_vhdl"
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
#
|
||||||
|
# Copyright (C) 1991-2015 Altera Corporation. All rights reserved.
|
||||||
|
# Your use of Altera Corporation's design tools, logic functions
|
||||||
|
# and other software and tools, and its AMPP partner logic
|
||||||
|
# functions, and any output files from any of the foregoing
|
||||||
|
# (including device programming or simulation files), and any
|
||||||
|
# associated documentation or information are expressly subject
|
||||||
|
# to the terms and conditions of the Altera Program License
|
||||||
|
# Subscription Agreement, the Altera Quartus II License Agreement,
|
||||||
|
# the Altera MegaCore Function License Agreement, or other
|
||||||
|
# applicable license agreement, including, without limitation,
|
||||||
|
# that your use is for the sole purpose of programming logic
|
||||||
|
# devices manufactured by Altera and sold by Altera or its
|
||||||
|
# authorized distributors. Please refer to the applicable
|
||||||
|
# agreement for further details.
|
||||||
|
#
|
||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
#
|
||||||
|
# Quartus II 64-Bit
|
||||||
|
# Version 15.0.0 Build 145 04/22/2015 SJ Web Edition
|
||||||
|
# Date created = 22:16:23 March 21, 2018
|
||||||
|
#
|
||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
#
|
||||||
|
# 1) The default values for assignments are stored in the file:
|
||||||
|
# dds_vhdl_assignment_defaults.qdf
|
||||||
|
# If this file doesn't exist, see file:
|
||||||
|
# assignment_defaults.qdf
|
||||||
|
#
|
||||||
|
# 2) Altera recommends that you do not modify this file. This
|
||||||
|
# file is updated automatically by the Quartus II software
|
||||||
|
# and any changes you make may be lost or overwritten.
|
||||||
|
#
|
||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
|
||||||
|
|
||||||
|
set_global_assignment -name FAMILY "Cyclone V"
|
||||||
|
set_global_assignment -name DEVICE 5CGXFC7C7F23C8
|
||||||
|
set_global_assignment -name TOP_LEVEL_ENTITY dds_vhdl
|
||||||
|
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 15.0.0
|
||||||
|
set_global_assignment -name PROJECT_CREATION_TIME_DATE "22:16:23 MARCH 21, 2018"
|
||||||
|
set_global_assignment -name LAST_QUARTUS_VERSION "19.1.0 Lite Edition"
|
||||||
|
set_global_assignment -name VHDL_FILE dds_vhdl_tb.vhd
|
||||||
|
set_global_assignment -name VHDL_FILE dds_vhdl.vhd
|
||||||
|
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
|
||||||
|
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 256
|
||||||
|
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
|
||||||
|
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
|
||||||
|
set_global_assignment -name EDA_SIMULATION_TOOL "ModelSim-Altera (VHDL)"
|
||||||
|
set_global_assignment -name EDA_OUTPUT_DATA_FORMAT VHDL -section_id eda_simulation
|
||||||
|
set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
|
||||||
|
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
|
||||||
|
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
|
||||||
|
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
|
||||||
|
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
|
||||||
|
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
|
||||||
@@ -0,0 +1,603 @@
|
|||||||
|
-----------------------------
|
||||||
|
-- Author - Imants Pulkstenis
|
||||||
|
-- Date - 04.06.2020
|
||||||
|
-- Project name - Lab work No3
|
||||||
|
-- Module name - dds_vhdl
|
||||||
|
--
|
||||||
|
-- Detailed module description:
|
||||||
|
-- DDS sinusoidal signal generator
|
||||||
|
--
|
||||||
|
-- Revision:
|
||||||
|
-- A - initial design
|
||||||
|
-- B -
|
||||||
|
--
|
||||||
|
-----------------------------
|
||||||
|
library ieee; --always use this library
|
||||||
|
use ieee.std_logic_1164.all; --always use this library
|
||||||
|
|
||||||
|
use ieee.numeric_std.all; --use this library if arithmetic required
|
||||||
|
|
||||||
|
|
||||||
|
--define connections to outside
|
||||||
|
entity dds_vhdl is
|
||||||
|
generic
|
||||||
|
(
|
||||||
|
phase_width : integer := 9;
|
||||||
|
data_width : integer := 16
|
||||||
|
);
|
||||||
|
port
|
||||||
|
(
|
||||||
|
clk : in std_logic; --100mhz clock
|
||||||
|
rst : in std_logic; --rst
|
||||||
|
phase_incr : in std_Logic_vector(phase_width - 1 downto 0); --"frequency"
|
||||||
|
phase_out : out std_Logic_vector(phase_width - 1 downto 0);
|
||||||
|
signal_out : out std_Logic_vector(data_width - 1 downto 0)
|
||||||
|
);
|
||||||
|
end dds_vhdl;
|
||||||
|
|
||||||
|
--define inside of the module
|
||||||
|
architecture behavioral of dds_vhdl is
|
||||||
|
|
||||||
|
--define inside use signals
|
||||||
|
type rom_table is array ( 0 to 2**phase_width - 1) of std_logic_vector(data_width - 1 downto 0);
|
||||||
|
constant signal_rom_table : rom_table :=
|
||||||
|
(
|
||||||
|
0 => x"0000",
|
||||||
|
1 => x"00c9",
|
||||||
|
2 => x"0192",
|
||||||
|
3 => x"025b",
|
||||||
|
4 => x"0324",
|
||||||
|
5 => x"03ed",
|
||||||
|
6 => x"04b5",
|
||||||
|
7 => x"057e",
|
||||||
|
8 => x"0646",
|
||||||
|
9 => x"070e",
|
||||||
|
10 => x"07d6",
|
||||||
|
11 => x"089d",
|
||||||
|
12 => x"0964",
|
||||||
|
13 => x"0a2b",
|
||||||
|
14 => x"0af1",
|
||||||
|
15 => x"0bb7",
|
||||||
|
16 => x"0c7c",
|
||||||
|
17 => x"0d41",
|
||||||
|
18 => x"0e06",
|
||||||
|
19 => x"0eca",
|
||||||
|
20 => x"0f8d",
|
||||||
|
21 => x"1050",
|
||||||
|
22 => x"1112",
|
||||||
|
23 => x"11d3",
|
||||||
|
24 => x"1294",
|
||||||
|
25 => x"1354",
|
||||||
|
26 => x"1413",
|
||||||
|
27 => x"14d2",
|
||||||
|
28 => x"1590",
|
||||||
|
29 => x"164d",
|
||||||
|
30 => x"1709",
|
||||||
|
31 => x"17c4",
|
||||||
|
32 => x"187e",
|
||||||
|
33 => x"1937",
|
||||||
|
34 => x"19f0",
|
||||||
|
35 => x"1aa7",
|
||||||
|
36 => x"1b5d",
|
||||||
|
37 => x"1c12",
|
||||||
|
38 => x"1cc7",
|
||||||
|
39 => x"1d7a",
|
||||||
|
40 => x"1e2b",
|
||||||
|
41 => x"1edc",
|
||||||
|
42 => x"1f8c",
|
||||||
|
43 => x"203a",
|
||||||
|
44 => x"20e7",
|
||||||
|
45 => x"2193",
|
||||||
|
46 => x"223e",
|
||||||
|
47 => x"22e7",
|
||||||
|
48 => x"238f",
|
||||||
|
49 => x"2435",
|
||||||
|
50 => x"24da",
|
||||||
|
51 => x"257e",
|
||||||
|
52 => x"2620",
|
||||||
|
53 => x"26c1",
|
||||||
|
54 => x"2760",
|
||||||
|
55 => x"27fe",
|
||||||
|
56 => x"289a",
|
||||||
|
57 => x"2935",
|
||||||
|
58 => x"29ce",
|
||||||
|
59 => x"2a65",
|
||||||
|
60 => x"2afb",
|
||||||
|
61 => x"2b8f",
|
||||||
|
62 => x"2c22",
|
||||||
|
63 => x"2cb2",
|
||||||
|
64 => x"2d41",
|
||||||
|
65 => x"2dcf",
|
||||||
|
66 => x"2e5a",
|
||||||
|
67 => x"2ee4",
|
||||||
|
68 => x"2f6c",
|
||||||
|
69 => x"2ff2",
|
||||||
|
70 => x"3076",
|
||||||
|
71 => x"30f9",
|
||||||
|
72 => x"3179",
|
||||||
|
73 => x"31f8",
|
||||||
|
74 => x"3274",
|
||||||
|
75 => x"32ef",
|
||||||
|
76 => x"3368",
|
||||||
|
77 => x"33df",
|
||||||
|
78 => x"3453",
|
||||||
|
79 => x"34c6",
|
||||||
|
80 => x"3537",
|
||||||
|
81 => x"35a6",
|
||||||
|
82 => x"3612",
|
||||||
|
83 => x"367d",
|
||||||
|
84 => x"36e5",
|
||||||
|
85 => x"374b",
|
||||||
|
86 => x"37b0",
|
||||||
|
87 => x"3812",
|
||||||
|
88 => x"3872",
|
||||||
|
89 => x"38cf",
|
||||||
|
90 => x"392b",
|
||||||
|
91 => x"3984",
|
||||||
|
92 => x"39db",
|
||||||
|
93 => x"3a30",
|
||||||
|
94 => x"3a83",
|
||||||
|
95 => x"3ad3",
|
||||||
|
96 => x"3b21",
|
||||||
|
97 => x"3b6d",
|
||||||
|
98 => x"3bb6",
|
||||||
|
99 => x"3bfd",
|
||||||
|
100 => x"3c42",
|
||||||
|
101 => x"3c85",
|
||||||
|
102 => x"3cc5",
|
||||||
|
103 => x"3d03",
|
||||||
|
104 => x"3d3f",
|
||||||
|
105 => x"3d78",
|
||||||
|
106 => x"3daf",
|
||||||
|
107 => x"3de3",
|
||||||
|
108 => x"3e15",
|
||||||
|
109 => x"3e45",
|
||||||
|
110 => x"3e72",
|
||||||
|
111 => x"3e9d",
|
||||||
|
112 => x"3ec5",
|
||||||
|
113 => x"3eeb",
|
||||||
|
114 => x"3f0f",
|
||||||
|
115 => x"3f30",
|
||||||
|
116 => x"3f4f",
|
||||||
|
117 => x"3f6b",
|
||||||
|
118 => x"3f85",
|
||||||
|
119 => x"3f9c",
|
||||||
|
120 => x"3fb1",
|
||||||
|
121 => x"3fc4",
|
||||||
|
122 => x"3fd4",
|
||||||
|
123 => x"3fe1",
|
||||||
|
124 => x"3fec",
|
||||||
|
125 => x"3ff5",
|
||||||
|
126 => x"3ffb",
|
||||||
|
127 => x"3fff",
|
||||||
|
128 => x"4000",
|
||||||
|
129 => x"3fff",
|
||||||
|
130 => x"3ffb",
|
||||||
|
131 => x"3ff5",
|
||||||
|
132 => x"3fec",
|
||||||
|
133 => x"3fe1",
|
||||||
|
134 => x"3fd4",
|
||||||
|
135 => x"3fc4",
|
||||||
|
136 => x"3fb1",
|
||||||
|
137 => x"3f9c",
|
||||||
|
138 => x"3f85",
|
||||||
|
139 => x"3f6b",
|
||||||
|
140 => x"3f4f",
|
||||||
|
141 => x"3f30",
|
||||||
|
142 => x"3f0f",
|
||||||
|
143 => x"3eeb",
|
||||||
|
144 => x"3ec5",
|
||||||
|
145 => x"3e9d",
|
||||||
|
146 => x"3e72",
|
||||||
|
147 => x"3e45",
|
||||||
|
148 => x"3e15",
|
||||||
|
149 => x"3de3",
|
||||||
|
150 => x"3daf",
|
||||||
|
151 => x"3d78",
|
||||||
|
152 => x"3d3f",
|
||||||
|
153 => x"3d03",
|
||||||
|
154 => x"3cc5",
|
||||||
|
155 => x"3c85",
|
||||||
|
156 => x"3c42",
|
||||||
|
157 => x"3bfd",
|
||||||
|
158 => x"3bb6",
|
||||||
|
159 => x"3b6d",
|
||||||
|
160 => x"3b21",
|
||||||
|
161 => x"3ad3",
|
||||||
|
162 => x"3a83",
|
||||||
|
163 => x"3a30",
|
||||||
|
164 => x"39db",
|
||||||
|
165 => x"3984",
|
||||||
|
166 => x"392b",
|
||||||
|
167 => x"38cf",
|
||||||
|
168 => x"3872",
|
||||||
|
169 => x"3812",
|
||||||
|
170 => x"37b0",
|
||||||
|
171 => x"374b",
|
||||||
|
172 => x"36e5",
|
||||||
|
173 => x"367d",
|
||||||
|
174 => x"3612",
|
||||||
|
175 => x"35a6",
|
||||||
|
176 => x"3537",
|
||||||
|
177 => x"34c6",
|
||||||
|
178 => x"3453",
|
||||||
|
179 => x"33df",
|
||||||
|
180 => x"3368",
|
||||||
|
181 => x"32ef",
|
||||||
|
182 => x"3274",
|
||||||
|
183 => x"31f8",
|
||||||
|
184 => x"3179",
|
||||||
|
185 => x"30f9",
|
||||||
|
186 => x"3076",
|
||||||
|
187 => x"2ff2",
|
||||||
|
188 => x"2f6c",
|
||||||
|
189 => x"2ee4",
|
||||||
|
190 => x"2e5a",
|
||||||
|
191 => x"2dcf",
|
||||||
|
192 => x"2d41",
|
||||||
|
193 => x"2cb2",
|
||||||
|
194 => x"2c22",
|
||||||
|
195 => x"2b8f",
|
||||||
|
196 => x"2afb",
|
||||||
|
197 => x"2a65",
|
||||||
|
198 => x"29ce",
|
||||||
|
199 => x"2935",
|
||||||
|
200 => x"289a",
|
||||||
|
201 => x"27fe",
|
||||||
|
202 => x"2760",
|
||||||
|
203 => x"26c1",
|
||||||
|
204 => x"2620",
|
||||||
|
205 => x"257e",
|
||||||
|
206 => x"24da",
|
||||||
|
207 => x"2435",
|
||||||
|
208 => x"238f",
|
||||||
|
209 => x"22e7",
|
||||||
|
210 => x"223e",
|
||||||
|
211 => x"2193",
|
||||||
|
212 => x"20e7",
|
||||||
|
213 => x"203a",
|
||||||
|
214 => x"1f8c",
|
||||||
|
215 => x"1edc",
|
||||||
|
216 => x"1e2b",
|
||||||
|
217 => x"1d7a",
|
||||||
|
218 => x"1cc7",
|
||||||
|
219 => x"1c12",
|
||||||
|
220 => x"1b5d",
|
||||||
|
221 => x"1aa7",
|
||||||
|
222 => x"19f0",
|
||||||
|
223 => x"1937",
|
||||||
|
224 => x"187e",
|
||||||
|
225 => x"17c4",
|
||||||
|
226 => x"1709",
|
||||||
|
227 => x"164d",
|
||||||
|
228 => x"1590",
|
||||||
|
229 => x"14d2",
|
||||||
|
230 => x"1413",
|
||||||
|
231 => x"1354",
|
||||||
|
232 => x"1294",
|
||||||
|
233 => x"11d3",
|
||||||
|
234 => x"1112",
|
||||||
|
235 => x"1050",
|
||||||
|
236 => x"0f8d",
|
||||||
|
237 => x"0eca",
|
||||||
|
238 => x"0e06",
|
||||||
|
239 => x"0d41",
|
||||||
|
240 => x"0c7c",
|
||||||
|
241 => x"0bb7",
|
||||||
|
242 => x"0af1",
|
||||||
|
243 => x"0a2b",
|
||||||
|
244 => x"0964",
|
||||||
|
245 => x"089d",
|
||||||
|
246 => x"07d6",
|
||||||
|
247 => x"070e",
|
||||||
|
248 => x"0646",
|
||||||
|
249 => x"057e",
|
||||||
|
250 => x"04b5",
|
||||||
|
251 => x"03ed",
|
||||||
|
252 => x"0324",
|
||||||
|
253 => x"025b",
|
||||||
|
254 => x"0192",
|
||||||
|
255 => x"00c9",
|
||||||
|
256 => x"0000",
|
||||||
|
257 => x"ff37",
|
||||||
|
258 => x"fe6e",
|
||||||
|
259 => x"fda5",
|
||||||
|
260 => x"fcdc",
|
||||||
|
261 => x"fc13",
|
||||||
|
262 => x"fb4b",
|
||||||
|
263 => x"fa82",
|
||||||
|
264 => x"f9ba",
|
||||||
|
265 => x"f8f2",
|
||||||
|
266 => x"f82b",
|
||||||
|
267 => x"f763",
|
||||||
|
268 => x"f69c",
|
||||||
|
269 => x"f5d5",
|
||||||
|
270 => x"f50f",
|
||||||
|
271 => x"f449",
|
||||||
|
272 => x"f384",
|
||||||
|
273 => x"f2bf",
|
||||||
|
274 => x"f1fa",
|
||||||
|
275 => x"f136",
|
||||||
|
276 => x"f073",
|
||||||
|
277 => x"efb0",
|
||||||
|
278 => x"eeee",
|
||||||
|
279 => x"ee2d",
|
||||||
|
280 => x"ed6c",
|
||||||
|
281 => x"ecac",
|
||||||
|
282 => x"ebed",
|
||||||
|
283 => x"eb2e",
|
||||||
|
284 => x"ea71",
|
||||||
|
285 => x"e9b4",
|
||||||
|
286 => x"e8f8",
|
||||||
|
287 => x"e83c",
|
||||||
|
288 => x"e782",
|
||||||
|
289 => x"e6c9",
|
||||||
|
290 => x"e611",
|
||||||
|
291 => x"e559",
|
||||||
|
292 => x"e4a3",
|
||||||
|
293 => x"e3ee",
|
||||||
|
294 => x"e33a",
|
||||||
|
295 => x"e287",
|
||||||
|
296 => x"e1d5",
|
||||||
|
297 => x"e124",
|
||||||
|
298 => x"e074",
|
||||||
|
299 => x"dfc6",
|
||||||
|
300 => x"df19",
|
||||||
|
301 => x"de6d",
|
||||||
|
302 => x"ddc3",
|
||||||
|
303 => x"dd1a",
|
||||||
|
304 => x"dc72",
|
||||||
|
305 => x"dbcb",
|
||||||
|
306 => x"db26",
|
||||||
|
307 => x"da82",
|
||||||
|
308 => x"d9e0",
|
||||||
|
309 => x"d93f",
|
||||||
|
310 => x"d8a0",
|
||||||
|
311 => x"d802",
|
||||||
|
312 => x"d766",
|
||||||
|
313 => x"d6cc",
|
||||||
|
314 => x"d633",
|
||||||
|
315 => x"d59b",
|
||||||
|
316 => x"d505",
|
||||||
|
317 => x"d471",
|
||||||
|
318 => x"d3df",
|
||||||
|
319 => x"d34e",
|
||||||
|
320 => x"d2bf",
|
||||||
|
321 => x"d232",
|
||||||
|
322 => x"d1a6",
|
||||||
|
323 => x"d11c",
|
||||||
|
324 => x"d094",
|
||||||
|
325 => x"d00e",
|
||||||
|
326 => x"cf8a",
|
||||||
|
327 => x"cf08",
|
||||||
|
328 => x"ce87",
|
||||||
|
329 => x"ce09",
|
||||||
|
330 => x"cd8c",
|
||||||
|
331 => x"cd11",
|
||||||
|
332 => x"cc98",
|
||||||
|
333 => x"cc22",
|
||||||
|
334 => x"cbad",
|
||||||
|
335 => x"cb3a",
|
||||||
|
336 => x"cac9",
|
||||||
|
337 => x"ca5b",
|
||||||
|
338 => x"c9ee",
|
||||||
|
339 => x"c984",
|
||||||
|
340 => x"c91b",
|
||||||
|
341 => x"c8b5",
|
||||||
|
342 => x"c851",
|
||||||
|
343 => x"c7ef",
|
||||||
|
344 => x"c78f",
|
||||||
|
345 => x"c731",
|
||||||
|
346 => x"c6d6",
|
||||||
|
347 => x"c67c",
|
||||||
|
348 => x"c625",
|
||||||
|
349 => x"c5d0",
|
||||||
|
350 => x"c57e",
|
||||||
|
351 => x"c52d",
|
||||||
|
352 => x"c4df",
|
||||||
|
353 => x"c493",
|
||||||
|
354 => x"c44a",
|
||||||
|
355 => x"c403",
|
||||||
|
356 => x"c3be",
|
||||||
|
357 => x"c37b",
|
||||||
|
358 => x"c33b",
|
||||||
|
359 => x"c2fd",
|
||||||
|
360 => x"c2c2",
|
||||||
|
361 => x"c288",
|
||||||
|
362 => x"c252",
|
||||||
|
363 => x"c21d",
|
||||||
|
364 => x"c1eb",
|
||||||
|
365 => x"c1bb",
|
||||||
|
366 => x"c18e",
|
||||||
|
367 => x"c163",
|
||||||
|
368 => x"c13b",
|
||||||
|
369 => x"c115",
|
||||||
|
370 => x"c0f1",
|
||||||
|
371 => x"c0d0",
|
||||||
|
372 => x"c0b1",
|
||||||
|
373 => x"c095",
|
||||||
|
374 => x"c07b",
|
||||||
|
375 => x"c064",
|
||||||
|
376 => x"c04f",
|
||||||
|
377 => x"c03d",
|
||||||
|
378 => x"c02d",
|
||||||
|
379 => x"c01f",
|
||||||
|
380 => x"c014",
|
||||||
|
381 => x"c00b",
|
||||||
|
382 => x"c005",
|
||||||
|
383 => x"c001",
|
||||||
|
384 => x"c000",
|
||||||
|
385 => x"c001",
|
||||||
|
386 => x"c005",
|
||||||
|
387 => x"c00b",
|
||||||
|
388 => x"c014",
|
||||||
|
389 => x"c01f",
|
||||||
|
390 => x"c02d",
|
||||||
|
391 => x"c03d",
|
||||||
|
392 => x"c04f",
|
||||||
|
393 => x"c064",
|
||||||
|
394 => x"c07b",
|
||||||
|
395 => x"c095",
|
||||||
|
396 => x"c0b1",
|
||||||
|
397 => x"c0d0",
|
||||||
|
398 => x"c0f1",
|
||||||
|
399 => x"c115",
|
||||||
|
400 => x"c13b",
|
||||||
|
401 => x"c163",
|
||||||
|
402 => x"c18e",
|
||||||
|
403 => x"c1bb",
|
||||||
|
404 => x"c1eb",
|
||||||
|
405 => x"c21d",
|
||||||
|
406 => x"c252",
|
||||||
|
407 => x"c288",
|
||||||
|
408 => x"c2c2",
|
||||||
|
409 => x"c2fd",
|
||||||
|
410 => x"c33b",
|
||||||
|
411 => x"c37b",
|
||||||
|
412 => x"c3be",
|
||||||
|
413 => x"c403",
|
||||||
|
414 => x"c44a",
|
||||||
|
415 => x"c493",
|
||||||
|
416 => x"c4df",
|
||||||
|
417 => x"c52d",
|
||||||
|
418 => x"c57e",
|
||||||
|
419 => x"c5d0",
|
||||||
|
420 => x"c625",
|
||||||
|
421 => x"c67c",
|
||||||
|
422 => x"c6d6",
|
||||||
|
423 => x"c731",
|
||||||
|
424 => x"c78f",
|
||||||
|
425 => x"c7ef",
|
||||||
|
426 => x"c851",
|
||||||
|
427 => x"c8b5",
|
||||||
|
428 => x"c91b",
|
||||||
|
429 => x"c984",
|
||||||
|
430 => x"c9ee",
|
||||||
|
431 => x"ca5b",
|
||||||
|
432 => x"cac9",
|
||||||
|
433 => x"cb3a",
|
||||||
|
434 => x"cbad",
|
||||||
|
435 => x"cc22",
|
||||||
|
436 => x"cc98",
|
||||||
|
437 => x"cd11",
|
||||||
|
438 => x"cd8c",
|
||||||
|
439 => x"ce09",
|
||||||
|
440 => x"ce87",
|
||||||
|
441 => x"cf08",
|
||||||
|
442 => x"cf8a",
|
||||||
|
443 => x"d00e",
|
||||||
|
444 => x"d094",
|
||||||
|
445 => x"d11c",
|
||||||
|
446 => x"d1a6",
|
||||||
|
447 => x"d232",
|
||||||
|
448 => x"d2bf",
|
||||||
|
449 => x"d34e",
|
||||||
|
450 => x"d3df",
|
||||||
|
451 => x"d471",
|
||||||
|
452 => x"d505",
|
||||||
|
453 => x"d59b",
|
||||||
|
454 => x"d633",
|
||||||
|
455 => x"d6cc",
|
||||||
|
456 => x"d766",
|
||||||
|
457 => x"d802",
|
||||||
|
458 => x"d8a0",
|
||||||
|
459 => x"d93f",
|
||||||
|
460 => x"d9e0",
|
||||||
|
461 => x"da82",
|
||||||
|
462 => x"db26",
|
||||||
|
463 => x"dbcb",
|
||||||
|
464 => x"dc72",
|
||||||
|
465 => x"dd1a",
|
||||||
|
466 => x"ddc3",
|
||||||
|
467 => x"de6d",
|
||||||
|
468 => x"df19",
|
||||||
|
469 => x"dfc6",
|
||||||
|
470 => x"e074",
|
||||||
|
471 => x"e124",
|
||||||
|
472 => x"e1d5",
|
||||||
|
473 => x"e287",
|
||||||
|
474 => x"e33a",
|
||||||
|
475 => x"e3ee",
|
||||||
|
476 => x"e4a3",
|
||||||
|
477 => x"e559",
|
||||||
|
478 => x"e611",
|
||||||
|
479 => x"e6c9",
|
||||||
|
480 => x"e782",
|
||||||
|
481 => x"e83c",
|
||||||
|
482 => x"e8f8",
|
||||||
|
483 => x"e9b4",
|
||||||
|
484 => x"ea71",
|
||||||
|
485 => x"eb2e",
|
||||||
|
486 => x"ebed",
|
||||||
|
487 => x"ecac",
|
||||||
|
488 => x"ed6c",
|
||||||
|
489 => x"ee2d",
|
||||||
|
490 => x"eeee",
|
||||||
|
491 => x"efb0",
|
||||||
|
492 => x"f073",
|
||||||
|
493 => x"f136",
|
||||||
|
494 => x"f1fa",
|
||||||
|
495 => x"f2bf",
|
||||||
|
496 => x"f384",
|
||||||
|
497 => x"f449",
|
||||||
|
498 => x"f50f",
|
||||||
|
499 => x"f5d5",
|
||||||
|
500 => x"f69c",
|
||||||
|
501 => x"f763",
|
||||||
|
502 => x"f82b",
|
||||||
|
503 => x"f8f2",
|
||||||
|
504 => x"f9ba",
|
||||||
|
505 => x"fa82",
|
||||||
|
506 => x"fb4b",
|
||||||
|
507 => x"fc13",
|
||||||
|
508 => x"fcdc",
|
||||||
|
509 => x"fda5",
|
||||||
|
510 => x"fe6e",
|
||||||
|
511 => x"ff37"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
-- phase counter
|
||||||
|
signal phase_cnt : unsigned(phase_width - 1 downto 0) := (others => '0');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
begin --define the operation of the module!
|
||||||
|
|
||||||
|
--phase output for debugging
|
||||||
|
phase_out <= std_logic_Vector(phase_cnt);
|
||||||
|
|
||||||
|
--phase counter
|
||||||
|
process(clk)
|
||||||
|
begin
|
||||||
|
if rising_edge(clk) then
|
||||||
|
if rst = '1' then
|
||||||
|
phase_cnt <= (others => '0');
|
||||||
|
else
|
||||||
|
phase_cnt <= unsigned(phase_cnt) + unsigned(phase_incr);
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
end process;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--data output
|
||||||
|
process(clk)
|
||||||
|
begin
|
||||||
|
if rising_edge(clk) then
|
||||||
|
if rst = '1' then
|
||||||
|
signal_out <= (others => '0');
|
||||||
|
else
|
||||||
|
--assign value from table
|
||||||
|
signal_out <= signal_rom_table(to_integer(unsigned(phase_cnt)));
|
||||||
|
end if;
|
||||||
|
end if;
|
||||||
|
end process;
|
||||||
|
|
||||||
|
end behavioral;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
-----------------------------
|
||||||
|
-- Author
|
||||||
|
-- Date
|
||||||
|
-- Project name
|
||||||
|
-- Module name
|
||||||
|
--
|
||||||
|
-- Detailed module description
|
||||||
|
--
|
||||||
|
--
|
||||||
|
--
|
||||||
|
--
|
||||||
|
--
|
||||||
|
--
|
||||||
|
--
|
||||||
|
-- Revision:
|
||||||
|
-- A - initial design
|
||||||
|
-- B -
|
||||||
|
--
|
||||||
|
-----------------------------
|
||||||
|
library ieee; --always use this library
|
||||||
|
use ieee.std_logic_1164.all; --always use this library
|
||||||
|
|
||||||
|
use ieee.numeric_std.all; --use this library if arithmetic required
|
||||||
|
|
||||||
|
|
||||||
|
--define connections to outside
|
||||||
|
entity dds_vhdl_tb is
|
||||||
|
generic
|
||||||
|
(
|
||||||
|
phase_width : integer := 9;
|
||||||
|
data_width : integer := 16
|
||||||
|
);
|
||||||
|
end dds_vhdl_tb;
|
||||||
|
|
||||||
|
--define inside of the module
|
||||||
|
architecture behavioral of dds_vhdl_tb is
|
||||||
|
|
||||||
|
--signals
|
||||||
|
signal clk : std_logic := '0'; --100mhz clock
|
||||||
|
signal rst : std_logic := '0'; --rst
|
||||||
|
signal phase_incr : std_Logic_vector(phase_width - 1 downto 0) := (others => '0'); --"frequency"
|
||||||
|
signal phase_out : std_Logic_vector(phase_width - 1 downto 0) := (others => '0');
|
||||||
|
signal signal_out : std_Logic_vector(data_width - 1 downto 0) := (others => '0');
|
||||||
|
|
||||||
|
--define components to use
|
||||||
|
component dds_vhdl is
|
||||||
|
generic
|
||||||
|
(
|
||||||
|
phase_width : integer := 9;
|
||||||
|
data_width : integer := 16
|
||||||
|
);
|
||||||
|
port
|
||||||
|
(
|
||||||
|
clk : in std_logic; --100mhz clock
|
||||||
|
rst : in std_logic; --rst
|
||||||
|
phase_incr : in std_Logic_vector(phase_width - 1 downto 0); --"frequency"
|
||||||
|
phase_out : out std_Logic_vector(phase_width - 1 downto 0);
|
||||||
|
signal_out : out std_Logic_vector(data_width - 1 downto 0)
|
||||||
|
);
|
||||||
|
end component;
|
||||||
|
|
||||||
|
constant clk_period : time := 10 ns;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
begin
|
||||||
|
|
||||||
|
clk <= not clk after clk_period/2;
|
||||||
|
|
||||||
|
uut : dds_vhdl
|
||||||
|
generic map
|
||||||
|
(
|
||||||
|
phase_width => phase_width,
|
||||||
|
data_width => data_width
|
||||||
|
)
|
||||||
|
port map
|
||||||
|
(
|
||||||
|
clk => clk,
|
||||||
|
rst => rst,
|
||||||
|
phase_incr => phase_incr,
|
||||||
|
phase_out => phase_out,
|
||||||
|
signal_out => signal_out
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
--tb process
|
||||||
|
process
|
||||||
|
begin
|
||||||
|
rst <= '1';
|
||||||
|
wait for 100 ns;
|
||||||
|
rst <= '0';
|
||||||
|
|
||||||
|
wait for clk_period/2;
|
||||||
|
--phase_incr <= (0 => '1', others => '0'); --1
|
||||||
|
phase_incr <= (1 => '1', others => '0'); --2
|
||||||
|
|
||||||
|
wait;
|
||||||
|
end process;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end behavioral;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
%% Funkcionalo un logisko shemu modelesana
|
||||||
|
% Laboratorijas darbs Nr.3.
|
||||||
|
% sinusoidu generesana un filtresana
|
||||||
|
% Autors: Imants Pulkstenis
|
||||||
|
%
|
||||||
|
% Apliecibas Nr.021REB152
|
||||||
|
%% 1.Sakuma dati
|
||||||
|
%
|
||||||
|
% Piemers:https://la.mathworks.com/help/simulink/slref/digital-waveform-generation-approximating-a-sine-wave.html
|
||||||
|
%
|
||||||
|
clear; format shortEng;
|
||||||
|
fs = 22050; % (ciparu dalas sample clock) = 22050 (audio standarts).
|
||||||
|
k = 52; % k - studenta apliecibas pedejie 2 cipari
|
||||||
|
f1 = 32 * k;
|
||||||
|
f2 = 48 * k;
|
||||||
|
%% 2.FIR bandpass filtrs
|
||||||
|
n1 = 40; % First filter order
|
||||||
|
n2 = 40; % Second filter order
|
||||||
|
|
||||||
|
band = 100; % filter bandwidth
|
||||||
|
fsh = fs/2; % corresponding to half the sample rate
|
||||||
|
|
||||||
|
Wn1= f1/fsh; % The cut-off frequency Wn must be between 0 < Wn < 1.0, with 1.0 corresponding to half the sample rate.
|
||||||
|
Wn2= f2/fsh;
|
||||||
|
|
||||||
|
b1 = fir1(n1,[Wn1-band/(fsh*2) Wn1+band/(fsh*2) ], 'bandpass'); % Window-based FIR filter design
|
||||||
|
b2 = fir1(n2,[Wn2-band/(fsh*2) Wn2+band/(fsh*2) ], 'bandpass'); % Window-based FIR filter design
|
||||||
|
|
||||||
|
[h1,w1] = freqz(b1);
|
||||||
|
[h2,w2] = freqz(b2);
|
||||||
|
figure (1)
|
||||||
|
plot (w1/pi,db(h1), ...
|
||||||
|
w2/pi,db(h2),...
|
||||||
|
[Wn1 Wn1],[3 -80], '--', ...
|
||||||
|
[Wn2 Wn2], [3 -80], '--',...
|
||||||
|
[0 1],[-20 -20], '--')
|
||||||
|
axis([0 1 -80 3])
|
||||||
|
grid on,
|
||||||
|
xlabel('Normalized Frequency (\times\pi rad/sample)')
|
||||||
|
ylabel('Magnitude (dB)')
|
||||||
|
legend('Response FIR_1','Response FIR_2','f_1','f_2', '-20dB target', 'Location','East')
|
||||||
|
title('Magnitude response')
|
||||||
|
%% 3.IIR bandpass filtrs
|
||||||
|
[b,a] = iirpeak(Wn1,2*(Wn2-Wn1),-22); %Wo must satisfy 0.0 < Wo < 1.0, with 1.0 corresponding to pi radians/sample
|
||||||
|
[h3,w3] = freqz(b,a);
|
||||||
|
[b,a] = iirpeak(Wn2,2*(Wn2-Wn1),-19);
|
||||||
|
[h4,w4] = freqz(b,a);
|
||||||
|
figure (2)
|
||||||
|
plot (w3/pi,db(h3), ...
|
||||||
|
w4/pi,db(h4),...
|
||||||
|
[Wn1 Wn1],[3 -80], '--', ...
|
||||||
|
[Wn2 Wn2], [3 -80], '--',...
|
||||||
|
[0 1],[-20 -20], '--')
|
||||||
|
axis([0 1 -80 3])
|
||||||
|
grid on,
|
||||||
|
xlabel('Normalized Frequency (\times\pi rad/sample)')
|
||||||
|
ylabel('Magnitude (dB)')
|
||||||
|
legend('Response IIR_1','Response IIR_2','f_1','f_2', '-20dB target', 'Location','East')
|
||||||
|
title('Magnitude response')
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user