Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Plz help me to link these modules in verilog

Status
Not open for further replies.

nitheeshnas

Newbie level 4
Newbie level 4
Joined
Jan 14, 2014
Messages
5
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Visit site
Activity points
52
i am doing a project on designing an ic for controlling the speed of a dc motor . the main modules in my project are pwm ,encoder,counter and pid..
i have generated the codes for counter, pid and pwm seperately but when i try to link it ..i am not getting it right ...plz help me..

these are my there modules

1,counter


Code Verilog - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
module count(clk,a,out,r,n,e);
input clk;
input a;
input [7:0]r;
input [7:0]n;
integer counter=0; 
output reg [7:0]e;
output reg [7:0]out;
reg [7:0]temp;
always @ (a)
begin
    if (a==1) counter=counter+1;
    temp=(counter/r);
    out=(temp*n);
    if
    (out>=200) e=out-200;
    else
    e=200-out;
    end
    endmodule



2,pid


Code Verilog - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
module PIDdddd(u_out,e_in,clk,reset,u);
output signed [15:0] u_out;
output signed [15:0] u;
input signed [15:0] e_in;
input clk;
input reset;
parameter k1=107;
parameter k2 = 104;
parameter k3 = 2;
reg signed [15:0] u_prev;
reg signed [15:0] e_prev1;
reg signed [15:0] e_prev2;
assign err=(e_in/5);
assign u =(u_prev)+(k1*err)+(k3*e_prev2);
assign u_out = u+(-(k2*e_prev1));
always @ (posedge clk)
if (reset == 1) begin
u_prev <= 0;
e_prev1 <= 0;
e_prev2 <= 0;
end
else begin
e_prev2 <= e_prev1;
e_prev1 <= err;
u_prev <= u_out;
end
endmodule



3,pwm


Code Verilog - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
module pulse(clk,switches,pwm);
    input clk;
    input [16:0] switches;
    output pwm;
    reg pwm;
    reg [15:0] counter=0;
    parameter sd=195;
    always @ (posedge clk)
    begin
        counter=counter+5;
        if(counter<=switches*sd) pwm=1;
        else pwm=0;
       if (counter>=50000) counter=0;
     end
 endmodule




and i want to connect these 3 modules that is i want to input the output of counter to pid and output of pid to pwm...plz help me
 
Last edited by a moderator:

If it just how to connect between 3 modules, then..
you can create another module as a top module and connect all your modules(counter, pid etc...) inside this top module as what you said
i want to input the output of counter to pid and output of pid to pwm
 

you can create a top module where you can instantiate all the other modules. like as follows ..

module TopModule(outputs & inputs here of the whole box containing the small boxes);
output ...
input .....

wire *instantiate some wires here to connect the modules among themselves*

//Now instantiate the modules in the following code. Read up on module instantiation. Just google it. Its pretty simple.

count counteri1(.............)
pid pidi1(...........)
pulse pulsei1(.............)
endmodule
 

Technically speaking you *should* TEST your individual modules first! And, by including them into a testbench file individually to make sure they work as expected in simulation, you will also learn how to connect them up in an upper level file to each other!
 

here i am adding the code for 3 modules counter,pid and pwm...plzz help me to link these three modules....in such a way that i want the output of counter to be given as the error signal input of pid(e_in) and the out put of pid (u_out) as the the input of pwm(switches)....plzz help....thanks in advance..

Code:
module count(clk,a,out,r,n,e);
input clk;
input a;
input [7:0]r;
input [7:0]n;
integer counter=0; 
output reg [7:0]e;
output reg [7:0]out;
reg [7:0]temp;
always @ (a)
begin
    if (a==1) counter=counter+1;
    temp=(counter/r);
    out=(temp*n);
    if
    (out>=200) e=out-200;
    else
    e=200-out;
    end
    endmodule





Code:
module PIDdddd(u_out,e_in,clk,reset,u);
output signed [15:0] u_out;
output signed [15:0] u;
input signed [15:0] e_in;
input clk;
input reset;
parameter k1=107;
parameter k2 = 104;
parameter k3 = 2;
reg signed [15:0] u_prev;
reg signed [15:0] e_prev1;
reg signed [15:0] e_prev2;
assign err=(e_in/5);
assign u =(u_prev)+(k1*err)+(k3*e_prev2);
assign u_out = u+(-(k2*e_prev1));
always @ (posedge clk)
if (reset == 1) begin
u_prev <= 0;
e_prev1 <= 0;
e_prev2 <= 0;
end
else begin
e_prev2 <= e_prev1;
e_prev1 <= err;
u_prev <= u_out;
end
endmodule



Code:
module pulse(clk,switches,pwm);
    input clk;
    input [16:0] switches;
    output pwm;
    reg pwm;
    reg [15:0] counter=0;
    parameter sd=195;
    always @ (posedge clk)
    begin
        counter=counter+5;
        if(counter<=switches*sd) pwm=1;
        else pwm=0;
       if (counter>=50000) counter=0;
     end
 endmodule
 

As said before, excepting in/out definitions, the content inside each functional block don´t matter.

You must express it terms of diagram, what exactly do you want connect to what.


+++
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top