- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
my program is:
module detector (s_out, s_in, reset, clk);
input s_in, reset, clk;
output s_out;
reg s_out;
reg state;
parameter even=0,odd=1;
always@(posedge clk or reset)
begin
if(reset)
state<=even;
else
case(state)
0:begin
state<=s_in?odd:even;
s_out<=s_in?1:0;
end
1:begin
state<=s_in?even:odd;
s_out<=s_in?0:1;
end
default:state<=even;
endcase
end
endmodule
but the program is not working for most test cases...help
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Could you elaborate in details? Do you mean compilation error? Could you provide the error message?
Thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
the program question is:
It is required to implement a sequence detector that will accept a serial bit stream “s_in” in synchronism with the positive edge of a clock, and will generate a serial bit stream “s_out” as output. The next bit of “s_out” will be 1, if the number of 1’s in “s_in” seen so far is odd; it will be 0 otherwise. The state transition diagram will consist of two states indicating whether the number of 1’s seen so far is odd or even. A “reset” low signal is used to asynchronously initialize the state to the “even 1’s state”.
my program:
module detector (s_out, s_in, reset, clk);
input s_in, reset, clk;
output s_out;
reg s_out;
reg state;
parameter even=0,odd=1;
always@(posedge clk or reset)
begin
if(!reset)
state<=even;
else
case(state)
0:begin
state<=s_in?odd:even;
s_out<=s_in?1:0;
end
1:begin
state<=s_in?even:odd;
s_out<=s_in?0:1;
end
default:state<=even;
endcase
end
endmodule
result of testcases:
Compilation : Passed
Public Test Cases: 1 / 4
Test Case 1
Pass: (state = x, s_in = 0, reset = 0) => (state = 0, s_out = x, reset = 0)\n
Pass: (state = x, s_in = 0, reset = 0) => (state = 0, s_out = x, reset = 0)\n
Passed
Test Case 2
Pass: (state = 0, s_in = 1, reset = 1) => (state = 1, s_out = 1, reset = 1)\n
Fail: (state = x, s_in = 1, reset = 1) => (state != 0, s_out != x, reset != 1)\n
Wrong Answer
Test Case 3
Pass: (state = 1, s_in = 1, reset = 1) => (state = 0, s_out = 0, reset = 1)\n
Fail: (state = 0, s_in = 1, reset = 1) => (state != 1, s_out != 1, reset != 1)\n
Wrong Answer
Test Case 4
Pass: (state = 1, s_in = 0, reset = 1) => (state = 1, s_out = 1, reset = 1)\n
Fail: (state = 0, s_in = 0, reset = 1) => (state != 0, s_out != 0, reset != 1)\n
Wrong Answer
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
In an Event Control in the HDL, you specified an Event Control that contains both double-edge events and single-edge events. You cannot include both event types in one Event Control.
always@(posedge clk or reset)
I edited the HDL and the simulation result is correct.
Thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you Sir. I just learned something new.But even after modification,some private test cases are wrong
i will get an exact answer by tomorrow and will update the program here as soon as possible
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Sure.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
module detector (s_out, s_in, reset, clk);
input s_in, reset, clk;
output s_out;
parameter EVEN=1'b0, ODD=1'b1;
reg s_out, state;
always @(posedge clk, reset)
begin
if (!reset)
state <= EVEN;
else begin
case ({state,s_in})
2'b00,2'b11: begin
s_out <= 1'b0;
state <= EVEN;
end
2'b01,2'b10: begin
s_out <= 1'b1;
state <= ODD;
end
endcase
end
end
endmodule
allthough i think its the same program in a different way!!!!!!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
any idea on how to implement this program?
Write a Verilog module to implement a 32-bit Booth’s multiplier using behavioural style. The module will take two 32-bit multiplier (“mpr”) and multiplicand (“mpd”) as inputs, and produce a 64-bit product (“prod”) as output. An active high input signal “start” is used to start the multiplication, and after completion of the multiplication, a signal “done” will be set to 1.and carry out the tasks at any individual stage including state transition in the failing edge of an input clock “clk”.
The following module template must be used for implementation:
module booth (mpr, mpd, prod, start, done, clk);
input [31:0] mpr, mpd;
input start, clk;
output [63:0] prod;
output done;
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
May I know the status? Have you resolved the first error with the HDL code I have attached earlier?
For the second question, you may refer to a video published by Intel FPGA: Verilog HDL Basics
https://www.youtube.com/watch?v=PJGvZSlsLKs. The video shows how to implement behavioural statement at 31:02mins.
Thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
yes the issue was resolved.
Thank you.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
the program i came up with is:
module booth (mpr, mpd, prod, start, done, clk);
input [31:0] mpr, mpd;
input start, clk;
output [63:0] prod;
output done;
integer i;
reg [31:0] A, Q, M;
reg Q_1;
reg [5:0] count;
initial
begin
A <= 32'b0;
M <= mpd;
Q <= mpr;
Q_1 <= 1'b0;
count <= 6'b100000;
end
always@(negedge clk)
begin
case ({Q[0], Q_1})
2'b00 : {A, Q, Q_1}=A<<<Q<<<Q_1;
2'b01 : begin
A=A+M;
{A, Q, Q_1}=A<<<Q<<<Q_1;
end
2'b10 : begin
A=A-M;
{A, Q, Q_1}=A<<<Q<<<Q_1;
end
2'b11:{A, Q, Q_1}=A<<<Q<<<Q_1;
endcase
count=count-1'b1;
end
assign prod = {A, Q};
assign done = (count==0);
endmodule
no compilation errors but not working for these test cases:
Compilation : Passed
Test Case 1
0
Pass: (start = 1, mpr = 16, mpd = 10) => (clock cycles = 37, prod = 160, done = 1)\n
Fail: (start = 1, mpr = 16, mpd = 10) => (clock cycles = 37, prod != X, done != 0)\n
Wrong Answer
Test Case 2
1
Pass: (start = 0, mpr = 16, mpd = 10) => (clock cycles = 37, prod = x, done = x)\n
Fail: (start = 0, mpr = 16, mpd = 10) => (clock cycles = 37, prod != X, done != 0)\n
Wrong Answer
Test Case 3
2
Pass: (start = 1, mpr = 75, mpd = 20) => (clock cycles = 41, prod = 1500, done = 1)\n
Fail: (start = 1, mpr = 75, mpd = 20) => (clock cycles = 41, prod != X, done != 0)\n
Wrong Answer
Test Case 4
3
Pass: (start = 1, mpr = 85, mpd = 60) => (clock cycles = 43, prod = 5100, done = 1)\n
Fail: (start = 1, mpr = 85, mpd = 60) => (clock cycles = 43, prod != X, done != 0)\n
Wrong Answer
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
It is glad to hear that the first issue was resolved.
For the second issue, may I request the design file and simulation result?
Thanks.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
May I know if you have any updates?
Thanks.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page