עבור לתוכן

lfsr עם טווח משתנה בverilog

Featured Replies

פורסם

אהלן.

אני רוצה לבנות Linear feedback shift register שייצר לי מספרים באקראי, הבעיה היא שטווח המספרים שאני רוצה שהוא יגריל משתנה עם הזמן (גדל וקטן).

LFSR "רגיל" עם טווח קבוע (14 ביט שזה הטווח המקסימלי שאני צריך) כבר הצלחתי ליצר, יש למישהו כיוון איך משנים את מספר הביטים תוך כדי שהמערכת רצה?

`timescale    1ns/10ps
`define BD 1 //Basic Delay
module lfsr
(
output reg [13:0]random_num,
input random_enable, clk
);
initial begin
random_num=14'b11111111111111;
end
wire linear_feedback;

assign #(`BD)linear_feedback =random_num[7]^random_num[3];

always @(clk) begin
#(`BD)random_num={random_num[12:0],linear_feedback};
end
endmodule

פורסם

חבר שערי AND ליציאות של הביטים הגבוהים שלך ותזין בהם '0' בהתאם לפלט שאתה מצפה לקבל. (הדק אחד מחובר ליציאה והשני לשליטה שלך)

למשל, אם אתה רוצה לקבל מספר בן 10 סיביות. דחוף '0' לשערי ה-AND של ארבעת הביטים הגבוהים.

פיתרון אולי קצת "מולכלך", מוסיף דיליי (ניתן לפתור על ידי הוספת חוצצים אם זה מהווה בעיה) ולא נותן שליטה מדוייקת בטווח אבל דיי פשוט ולא מצריך התערבות נוספת בLFSR.

עוזר?

פורסם
  • מחבר

מאוד מאוד עוזר.:jafafa:

אבל נניח שאני רוצה להגביל את עצמי ל10 (1,2,3,4...,10).

אני מאפס את 10 הmsb ונשאר עם 4 Lsb. זה נותן לי מ0 עד 15.

אם אני אאפס כך: xxxxxxxxxxBxBx אני מוגבל עד ל10 אבל אפשר לקבל כך רק 0,2,8,10 ואני צריך את כל הטווח.

נ.ב

תודה על ההתיחסות למשוואה עבור 14 ביט, שיניתי את הפונקציה ל bit[1]^bit[2]^bit[13]^bit[14] =linear_feedback והקפיצות משמעותיות בהרבה

[TABLE=class: wikitable]

[TR]

[TH=bgcolor: #F2F2F2, align: center]14[/TH]

[TD]39eb2e006c96cf59fb003719c35f4a66.png[/TD]

[TD]16383[/TD]

[/TR]

[TR]

[/TR]

[/TABLE]

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים