zombi 0 24 августа, 2020 Опубликовано 24 августа, 2020 · Жалоба Помогите на верилоге это написать. Xorshift /* The state array must be initialized to not be all zero */ uint32_t xorshift128(struct xorshift128_state *state) { /* Algorithm "xor128" from p. 5 of Marsaglia, "Xorshift RNGs" */ uint32_t t = state->d; uint32_t const s = state->a; state->d = state->c; state->c = state->b; state->b = s; t ^= t << 11; t ^= t >> 8; return state->a = t ^ s ^ (s >> 19); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 24 августа, 2020 Опубликовано 24 августа, 2020 · Жалоба эмм, а проблема то в чем? t = d; t ^= t << 11; t ^= t >> 8; a = t ^ a ^ (a >> 19); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 24 августа, 2020 Опубликовано 24 августа, 2020 · Жалоба А зачем в алгоритме s вообще? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 24 августа, 2020 Опубликовано 24 августа, 2020 · Жалоба 8 minutes ago, zombi said: А зачем в алгоритме s вообще? кодинг стайл у человека такой Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 24 августа, 2020 Опубликовано 24 августа, 2020 · Жалоба Гляньте пожалуйста, не накосячил ли чего? может где перемудрил... и инициализацию добавил. module XorShift128 (input clk, Init, Step, output reg [31:0]A); reg [31:0]B,C,D; wire [31:0] T = D ^ (D << 11) ^ (D >> 8); always @(posedge clk) if (Init) begin D <= {32{1'b1}}; C <= {32{1'b1}}; B <= {32{1'b1}}; A <= {32{1'b1}};end else if (Step) begin D <= C; C <= B; B <= A; A <= T ^ A ^ (A >> 19); end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 25 августа, 2020 Опубликовано 25 августа, 2020 · Жалоба On 8/24/2020 at 1:02 PM, zombi said: wire [31:0] T = D ^ (D << 11) ^ (D >> 8); это не правильно. В исходнике не зря разнесли <<11 и >>8 в 2 присваивания :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 25 августа, 2020 Опубликовано 25 августа, 2020 · Жалоба Понял. Спасибо. wire [31:0]T,J; assign J = D ^ (D << 11); assign T = J ^ (J >> 8); Так правильно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 25 августа, 2020 Опубликовано 25 августа, 2020 · Жалоба 3 hours ago, zombi said: Так правильно? так да Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться