Сб сен 06, 2014 15:59:39
module gen (output reg aa)
initial forever begin aa=0; #50; aa=1; #50; end
endmodule
Сб сен 06, 2014 21:52:12
Вс сен 07, 2014 00:30:49
module forever_example (output reg clk);
initial begin
#1 clk = 0;
forever begin
#5 clk = ! clk;
end
end
initial begin
$monitor ("Time = %d clk = %b",$time, clk);
#100 $finish;
end
endmodule
Вс сен 07, 2014 12:15:23
module forever_example (output reg clk);
initial begin
#1 clk = 0;
// forever begin
// #5 clk = ! clk;
// end
end
always #5 clk = ! clk;
initial begin
$monitor ("Time = %d clk = %b",$time, clk);
#100 $finish;
end
endmodule
Вс сен 07, 2014 15:27:38
module repeat_example(clk, led);
input clk;
output led;
reg[26:0] longcnt;
reg [15:0] led;
parameter delay_max = 20000000;
parameter led_max = 65535;
always @(posedge clk)
begin
if(led == led_max)
led <= 0;
if(longcnt == delay_max)
begin
longcnt <= 0;
led <= led +1;
end
else
begin
longcnt <= longcnt+1;
end
end
endmodule
1 //----------
2 // Design Name : uart
3 // File Name : uart.v
4 // Function : Simple UART
5 // Coder : Deepak Kumar Tala
6 //----------
7 module uart (
8 reset ,
9 txclk ,
10 ld_tx_data ,
11 tx_data ,
12 tx_enable ,
13 tx_out ,
14 tx_empty ,
15 rxclk ,
16 uld_rx_data ,
17 rx_data ,
18 rx_enable ,
19 rx_in ,
20 rx_empty
21 );
22 // Port declarations
23 input reset ;
24 input txclk ;
25 input ld_tx_data ;
26 input [7:0] tx_data ;
27 input tx_enable ;
28 output tx_out ;
29 output tx_empty ;
30 input rxclk ;
31 input uld_rx_data ;
32 output [7:0] rx_data ;
33 input rx_enable ;
34 input rx_in ;
35 output rx_empty ;
36
37 // Internal Variables
38 reg [7:0] tx_reg ;
39 reg tx_empty ;
40 reg tx_over_run ;
41 reg [3:0] tx_cnt ;
42 reg tx_out ;
43 reg [7:0] rx_reg ;
44 reg [7:0] rx_data ;
45 reg [3:0] rx_sample_cnt ;
46 reg [3:0] rx_cnt ;
47 reg rx_frame_err ;
48 reg rx_over_run ;
49 reg rx_empty ;
50 reg rx_d1 ;
51 reg rx_d2 ;
52 reg rx_busy ;
53
54 // UART RX Logic
55 always @ (posedge rxclk or posedge reset)
56 if (reset) begin
57 rx_reg <= 0;
58 rx_data <= 0;
59 rx_sample_cnt <= 0;
60 rx_cnt <= 0;
61 rx_frame_err <= 0;
62 rx_over_run <= 0;
63 rx_empty <= 1;
64 rx_d1 <= 1;
65 rx_d2 <= 1;
66 rx_busy <= 0;
67 end else begin
68 // Synchronize the asynch signal
69 rx_d1 <= rx_in;
70 rx_d2 <= rx_d1;
71 // Uload the rx data
72 if (uld_rx_data) begin
73 rx_data <= rx_reg;
74 rx_empty <= 1;
75 end
76 // Receive data only when rx is enabled
77 if (rx_enable) begin
78 // Check if just received start of frame
79 if ( ! rx_busy && ! rx_d2) begin
80 rx_busy <= 1;
81 rx_sample_cnt <= 1;
82 rx_cnt <= 0;
83 end
84 // Start of frame detected, Proceed with rest of data
85 if (rx_busy) begin
86 rx_sample_cnt <= rx_sample_cnt + 1;
87 // Logic to sample at middle of data
88 if (rx_sample_cnt == 7) begin
89 if ((rx_d2 == 1) && (rx_cnt == 0)) begin
90 rx_busy <= 0;
91 end else begin
92 rx_cnt <= rx_cnt + 1;
93 // Start storing the rx data
94 if (rx_cnt > 0 && rx_cnt < 9) begin
95 rx_reg[rx_cnt - 1] <= rx_d2;
96 end
97 if (rx_cnt == 9) begin
98 rx_busy <= 0;
99 // Check if End of frame received correctly
100 if (rx_d2 == 0) begin
101 rx_frame_err <= 1;
102 end else begin
103 rx_empty <= 0;
104 rx_frame_err <= 0;
105 // Check if last rx data was not unloaded,
106 rx_over_run <= (rx_empty) ? 0 : 1;
107 end
108 end
109 end
110 end
111 end
112 end
113 if ( ! rx_enable) begin
114 rx_busy <= 0;
115 end
116 end
117
118 // UART TX Logic
119 always @ (posedge txclk or posedge reset)
120 if (reset) begin
121 tx_reg <= 0;
122 tx_empty <= 1;
123 tx_over_run <= 0;
124 tx_out <= 1;
125 tx_cnt <= 0;
126 end else begin
127 if (ld_tx_data) begin
128 if ( ! tx_empty) begin
129 tx_over_run <= 0;
130 end else begin
131 tx_reg <= tx_data;
132 tx_empty <= 0;
133 end
134 end
135 if (tx_enable && ! tx_empty) begin
136 tx_cnt <= tx_cnt + 1;
137 if (tx_cnt == 0) begin
138 tx_out <= 0;
139 end
140 if (tx_cnt > 0 && tx_cnt < 9) begin
141 tx_out <= tx_reg[tx_cnt -1];
142 end
143 if (tx_cnt == 9) begin
144 tx_out <= 1;
145 tx_cnt <= 0;
146 tx_empty <= 1;
147 end
148 end
149 if ( ! tx_enable) begin
150 tx_cnt <= 0;
151 end
152 end
153
154 endmodule
Вс сен 07, 2014 18:43:51
#5 clk = ! clk;
Вс сен 07, 2014 19:52:06
для тестов и отладки
Вс сен 21, 2014 16:32:21
module clock_spliter(
input in_24576, // вход частоты от первого генератора,
input in_225792, // вход частоты от второго генератора,
input en_24576, // включен - выключен первый генератор,
input en_225792, // включен - выключен второй генератор,
output wire clock
);
assign clock = (en_24576 == 1)? in_24576 : in_225792;
assign clock = (en_225792 == 1)? in_225792 : in_24576;
endmodule
Пт сен 26, 2014 05:21:46
Пт сен 26, 2014 07:09:00
module start (input clock, output wire test_clock, output reg[2:0] leds);
assign test_clock = clock; // передать сигнал с генератора на выход, типо тест.
reg[25:0] ints;
always @(clock)
begin
if(leds == 3) leds <= 0;
if(ints == 50000000)
begin
ints <=0;
leds <= leds + 1;
end
else
begin
ints = ints + 1;
end
end
endmodule
Пт сен 26, 2014 11:50:46
module start (input clock, output wire test_clock, output reg[2:0] leds);
assign test_clock = clock; //
reg[25:0] ints;
//Timer
always @(posedge clock)
begin
if(ints < 50000000)
ints = ints + 26'h1;
else
ints <= 0;
end
//Led
always @(posedge clock)
begin
if(ints == 1)
if(leds == 7)
leds <= 0;
else
leds = leds + 3'h1;
end
endmodule
Пт сен 26, 2014 23:31:01
module led( input clock, input reset, output reg [7:0] leds)
always @(posedge klock or posedge reset)
begin
if(!reset)
leds <=0;
else
leds <= leds + 1;
end
endmodule
module start
(
input reset,
input clock,
output wire enable_clock,
output reg[7:0] leds
);
assign enable_clock = clock;
reg[30:0] ints;
reg res;
always @(reset)
begin
if(reset) res <=0;
else res = 1;
end
always @( posedge clock)
begin
if(res)
begin
leds <= 7`b10101100;
ints <= 1;
end
if(leds == 255) leds <= 1;
if(ints == 10000000)
begin
ints <= 0;
leds <= leds + 1;
end
else
ints <= ints + 1;
end
endmodule
Вс сен 28, 2014 02:19:39
module start
(
input reset,
input clock,
output wire enable_clock,
output reg[7:0] leds
);
assign enable_clock = clock;
reg[30:0] ints;
reg res;
//always @(reset)
// begin
// if(reset) res <=0;
// else res = 1;
// end
always @( posedge clock)
begin
if(reset) //if(res)
begin
leds <= 8'b10101100;
ints <= 1;
end
if(leds == 255) leds <= 1;
if(ints == 10)
begin
ints <= 0;
leds <= leds + 1;
end
else
ints <= ints + 1;
end
endmodule
Вс сен 28, 2014 15:41:19
reg[7:0] ints_1; // 1 КГц.
reg clk_1k;
always @(posedge clk_500k)
begin
if(ints_1 == 249)
begin
ints_1 <=0;
clk_1k <= ~clk_1k;
end
else ints_1 <= ints_1 + 1;
end
LCD_massiv[8:0] <= encoder_binaru(min);
LCD_massiv[17:9] <= encoder_binaru(d_min);
LCD_massiv[26:18] <= encoder_binaru(xors);
LCD_massiv[35:27] <= encoder_binaru(d_xors);
Вс сен 28, 2014 21:04:46
Максимум что могу, загрузить по жтаг прошивку в ФПГА.
Пн сен 29, 2014 02:54:26
MisterDi писал(а):Квартус сильно не любит русских букв в путях. Переместите проект в каталог с латинским именем.
// LCD_driver
initial LCD_load = 1;
always @(posedge clk_1k) //такт одна микросекунда
begin
if(LCD_massiv_count == 72)
begin
LCD_din <= LCD_massiv[LCD_massiv_count];
LCD_massiv_count <= LCD_massiv_count + 1;
LCD_dclk <= 1;
end
end
always @(negedge clk_1k) begin LCD_dclk <= 0; end // Error (10028): Can't resolve multiple constant drivers for net "LCD_dclk" at timer.v(150)
module Timer
(
input clk_1c // такт одна секунда
input clk_1k // такт 1 киллогерц
output reg LCD_load,
output reg LCD_dclk,
output reg LCD_din
)
//счетчик часов и минут.
reg[4:0] min; //минуты
reg[4:0] d_min; //десятые минуты
reg[4:0] xors; //часы
reg[4:0] d_xors; //десятые часов
reg pig; //мигающая точка
reg[71:0] LCD_massiv;
reg[6:0] LCD_massiv_count; //72 такта
reg[5:0] clk_minuta;
always @(negedge clk_1c) //такт одна секунда
begin
if(clk_minuta == 60)
begin
if(min >=10) begin d_min <= d_min + 1; min <= 0; end
else min <= min + 1;
if((d_min == 5)&& (min ==10))begin xors <= xors + 1; d_min <= 0; min <= 0; end
else d_min <= d_min +1;
if(xors >=10) begin d_xors <= d_xors +1; xors <= 0; end
else xors <= xors +1;
if((d_xors == 2)&&(xors == 3)&&(d_min == 5)&& (min ==10)) begin min <= 0; d_min <=0; xors <= 0; d_xors <= 0; end
//дешифровка десатичных чисел в бинарный код матрицы, и присоединение в массив.
LCD_massiv[8:0] <= encoder_binaru(min);
LCD_massiv[17:9] <= encoder_binaru(d_min);
LCD_massiv[26:18] <= encoder_binaru(xors);
LCD_massiv[35:27] <= encoder_binaru(d_xors);
LCD_massiv[71:36] <= 0;
clk_minuta <=0;
end
clk_minuta <= clk_minuta + 1;
pig <= ~pig; // мигающая точка.
LCD_massiv[17] <= pig;
LCD_massiv_count <= 0; // взвести работу LCD драйвера, вот эта строчка не дает коду откомпелироваться.
end
// LCD_driver
initial LCD_load = 1;
always @(posedge clk_1k) //такт одна микросекунда
begin
if(LCD_massiv_count <= 72)
begin
LCD_din <= LCD_massiv[LCD_massiv_count];
LCD_massiv_count <= LCD_massiv_count + 1;
LCD_dclk <= 1;
end
end
always @(negedge clk_1k) begin LCD_dclk <= 0; end // Error (10028): Can't resolve multiple constant drivers for net "LCD_dclk" at timer.v(150)
function[9:0] encoder_binaru; input wire[4:0] decimal;
case(decimal)
0: encoder_binaru=9`b111101100;
1: encoder_binaru=9`b110000000;
2: encoder_binaru=9`b011011100;
3: encoder_binaru=9`b111010100;
4: encoder_binaru=9`b110110000;
5: encoder_binaru=9`b101110100;
6: encoder_binaru=9`b101111100;
7: encoder_binaru=9`b111000000;
8: encoder_binaru=9`b111111100;
9: encoder_binaru=9`b111110100;
10: encoder_binaru=9`b000000000;
endcase
endfunction
/*
task pot(x,y);
input x; output y;
endtask
*/
endmodule
Пн сен 29, 2014 08:31:27
Пн сен 29, 2014 15:18:32
Вы по фронту тактовой присваиваете LCD_dclk 1, а по спаду 0
Пн сен 29, 2014 15:59:49
// LCD_driver
initial LCD_load = 1;
always @(posedge clk_1k) //такт одна микросекунда
begin
if(LCD_massiv_count == 72)
begin
LCD_din <= LCD_massiv[LCD_massiv_count];
LCD_massiv_count <= LCD_massiv_count + 1;
LCD_dclk <= 1;
end else LCD_dclk <= 0;
end
Пн сен 29, 2014 23:43:40
И что Вам мешает написать так?